Seqmentasiya səhvləri ilə süründürmə nöqtələri arasında fərq varmı?


cavab 1:

Sıxılan göstərici

char * func () {char str [10]; strcpy (str, "Salam!"); qayıt (str); } // göstərici nöqtələrini əhatə dairəsindən kənar olan str-ə qaytarır.

(Müəyyən edilməmiş davranış)

açıq şəkildə

int * c = malloc (ölçüsü (int)); pulsuz (c); * c = 3; // paylaşılan yerə yazın!

C-də işarələr və yaddaş sızması

idi

dinamik təyin olunmuşdur

void func () {char * ch; ch = (char *) malloc (10); } // ch xaricində etibarlı deyil, ticarət mərkəzinin mağazasına daxil olmaq üçün bir yol yoxdur

10 bayt

Batch daşması (veb sayt)


cavab 2:

Diqqet çəkən PTR-dən ayrılma səhvinin alınması yaxşı bir şey olduğunu unutmayın. Bu, xüsusən ptr yığındakı aydın yaddaşa işarə edərsə və ya əvvəlcə etibarsız olduqdan sonra daxil olsanız, bu * zəmanət verilmir. Bu vəziyyətdə, segfault deyil, sirli bir səhviniz var, çünki yaddaş junk ilə yazılır və bunun səbəbini bilmirsiniz.

Bu səbəbdən, cüzi olmayan C kodunu yazarkən Valgrind kimi yaddaş sızması və korrupsiya vasitələrindən istifadə etməlisiniz.