C'de sarkan bir işaretçi ile bir boş işaretçi arasındaki fark nedir? Teknik olarak, her ikisi de aynı görünüyor.


cevap 1:

Bu işaretçilerden hiçbirini silmedığınız sürece hiçbir fark yoktur. Bu nedenle, sarkma, işaretçinin işaret ettiği belleğin başka bir şey için yeniden kullanılmasına izin verildiğini, ancak program eski içeriğin hala orada olduğunu varsayar ve buna erişmeye çalışır. Bu genellikle program yürütmenin bir noktasında yanlış davranışa neden olur.

Buna ek olarak, sorunun kendisinin "işaretçileri anlamadığınızı" güçlü bir şekilde gösterdiğini hissediyorum. Belleği, her bir kutunun içeriğe (genellikle 0 ... 255) sahip olabileceği bir numaralı kutu satırı olarak hayal ediyorsanız, işaretçi sayıyı tutan (burada mimari özellikleri basitleştiriyorum) bir tamsayıdır. değeri).


cevap 2:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 3:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 4:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 5:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 6:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 7:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 8:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 9:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.


cevap 10:

Burada zaten kavramı bilen biri için yararlı olabilecek birçok "İngilizce" görüyorum ama bunları bilmeyen biri için anlamsız metinlerden başka bir şey olmayacak. Ancak cevaplar ve benzetmelerdeki eğlenceli bölüm, kimseye hakaret ederse özür diler.

Null Pointer: Adresi içeren veya NULL konumu söyleyen bir işaretçi. Bu konuma yazmak bir hatadır. Bu, programcıların bir segmentasyon hatasına ve / veya çökmeye neden olabilecek bir bellek konumuna yanlışlıkla yazmasını önlemek için tasarlanmıştır. Fikir her zaman NULL ile bir işaretçiyi başlatmak ve yazmadan önce NULL olup olmadığını kontrol etmekti. Şu senaryoyu inceleyin:

int * p; // şu anda bu işaretçi rastgele bir adres içeriyor, segment dışında bile herhangi bir yeri gösterebilir

* p = 10; // bu kesinlikle hata verecektir.

güvenli bir yol şöyle olurdu:

int * p = NULL;

if (p! = NULL)

* p = 10;

Sarkan işaretçi: Adından da anlaşılacağı gibi, başlangıçta işaret ettiği bellek bloğunun nereden işaret edileceğine dair ipucu olmayan bir işaretçi bir şekilde serbest bırakılır.

İşaretçiyi sarkıtmanın birçok yolu vardır. En yaygın yol, yeni kopyalama, silme ve silme

int * p = NULL; int * q = NULL;

p = yeni x;

q = p;

q'yu sil; // hem q hem de q ile bellek bloğu işaretçisi bellekten kaldırılır

// buradan bellekte mevcut olmayan bir adrese sahip bir p işaretçisi var. Bu işaretçiye bir değer atamaya çalışırsak, başımız belada, p burada sarkan işaretçi

* p = 10; // kazasında

muhtemelen yanlışlıkla sarkan bir işaretçi oluşturmanın diğer yolları, atama veya bir yönteme bir nesne ileterek nesnenin sığ kopyasını yapmak ve böylece sizin için yine sığ kopya yapan derleyici tarafından sağlanan kopya yapıcıyı kullanmak olacaktır.