我在接受採訪時被問到了這個問題。什麼是未初始化的指針變量?
如果有聲明,但沒有初始化像這樣的指針: int *ptr;
是它分配一個默認值?或者它會是一個空指針?
if(ptr) { //block of code }
請問如果條件通過:另外,如果我們試圖用這個指針一樣會發生什麼?此外,這將工作在調試/發佈構建?
我試着在家裏運行這個程序,發現if
條件的推移,如果我嘗試打印的PTR這樣的值:
printf("%x %d", ptr, *ptr);
它打印一些隨機值,但它不會使程序崩潰。這背後的解釋是什麼?
「可能有助於播種隨機數發生器」 - 提供的熵估計值與0一致。 –
並提供了一條評論,指出這是未初始化的原因,因此有人不運行valgrind,初始化爲null並打開一個新的安全漏洞(http://digitaloffense.net/tools/debian-openssl/) –
雖然這很複雜。 Debian的bug涉及一個刪除*兩個操作來添加種子數據的檢查。其中一個貢獻的數據始終未初始化,並導致valgrind/purify錯誤。刪除這是安全的,因爲它不是播種過程的重要組成部分。其他操作貢獻的數據通常不是未初始化的,在初始化的情況下,它對安全性至關重要。但是這條線看起來很像另一條線,所以當另一條線(可能是正確的)被刪除時,它(絕對不正確)也被刪除了。 –