我在接受采访时被问到了这个问题。什么是未初始化的指针变量?
如果有声明,但没有初始化像这样的指针: 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错误。删除这是安全的,因为它不是播种过程的重要组成部分。其他操作贡献的数据通常不是未初始化的,在初始化的情况下,它对安全性至关重要。但是这条线看起来很像另一条线,所以当另一条线(可能是正确的)被删除时,它(绝对不正确)也被删除了。 –