SORU
30 EKİM 2012, Salı


Sarkan işaretçi ve bellek arasındaki fark sızıntısı

Sarkan bir gösterici ve bir bellek sızıntısı arasındaki farkı anlamıyorum. Nasıl bu iki terimin ilgili?

CEVAP
30 EKİM 2012, Salı


Birdangling pointerzaten serbest bellek işaret eder. Depolama artık ayrılır. Erişmeye çalışırken Bölümleme hatası neden olabilir.

Ortak bir şekilde sarkan bir işaretçi ile bitirmek için:

char* func()
{
   char str[10];
   strcpy(str,"Hello!");
   return(str); 
}
//returned pointer points to str which has gone out of scope. 

Zaman kapsam dışına giderdi yerel bir değişken, bir adres dönen kontrol arama işlevi geri döndü.(Tanımsız davranış)

Başka bir ortak sarkan gösterici örnek ücretsiz sonra işaretçi üzerinden bir bellek konumu, bir erişimaçıkçabellek çağırdı.

int *c = malloc(sizeof(int));
free(c);
*c = 3; //writing to freed location!

Birmemory leakserbest edilmemiş bellek, erişim yolu (veya ücretsiz) Daha fazla almak için yolu vardır, yok artık, yok. (E. g. işaretçi biroldubir bellek konumu sadece referansdinamik olarak tahsis edilmiş(serbest) şimdi başka bir yerde puan.)

void func(){
    char *ch;
    ch = (char*) malloc(10);
}
//ch not valid outside, no way to access malloc-ed memory

Char-Ao ch işlevi sonunda kapsam dışında, sızıntı giden yerel bir değişken dinamik olarak ayrılmış10 bayt.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 99being99

    99being99

    2 EYLÜL 2008
  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011