我已经编写了这段代码并期望它失败,因为我没有为指针变量分配内存。并没有引发任何错误,令我惊讶的是。是什么原因?
如果我只是随机删除第二个LOC,则会引发分段错误。如何解释这种看似奇怪的行为?
uint16_t *c;
uint8_t *d;
*c = 1;
printf("%x:%x",c,*c);
答案 0 :(得分:0)
正如其他人指出的那样,它是UB。在不引起段错误或类似错误的意义上,您对代码“工作”的观察或多或少是随机的。您在堆栈上分配的另一个变量可能会在中分配您的c指针,因此它所指向的位置可以不同(随机)。 (或者换句话说,它的初始随机值会或可能会不同)。
取决于在函数中分配对象的位置和对象的情况下,程序可观察到的不同行为是一个致命的错误,即函数中的内存分配有问题。