- Katılım
- 24 Şubat 2018
- Mesajlar
- 24,140
C:int* foo() { int k = 3; k++; return &k; } int main() { int* a = foo(); printf("%d",*a); }
Şimdi aklıma başka bir soru daha geldi. Ben 4 dedim halbuki adresi döndürülen k'nın local bir değer olduğunu farketmedim. Static olsaydı doğru olacaktı . Burada peki compiler error mu verir yoksa warning mi ?
Stack'tan bir adres döndürüyorsun, ekrana herşey yazılabilir Bu tip bug'ları her derleyici yakalayamaz. Bunlar için "lint" denilen programlar kullanmak gerekiyor. Veya MISRA gibi bazı uyumluluk testleri yapan yazılımlar var, onlarla taramak gerekiyor. Bende SciTools'un Understand yazılımı var. 27 milyon satır kod olan Linux Kernel'i taratıyorum ve çok büyük kolaylık sağlıyor.