内存未分配指针变量有效.如何



我已经编写了这段代码并预计它会失败,因为我没有为指针变量分配内存。令我惊讶的是,它没有抛出任何错误。原因是什么?

如果我只是随机删除第二个 LOC,它会引发分段错误。如何解释这种看似奇怪的行为?

uint16_t *c; 
uint8_t *d;
*c = 1;
printf("%x:%x",c,*c); 

正如其他人指出的那样,它是UB。您观察到的代码"工作"在不会导致段错误或类似错误或类似的情况下或多或少是随机的。您在堆栈上分配的另一个变量可能会更改 c 指针的分配位置,因此它可以具有指向的不同(随机)位置。(或者,换句话说,它的初始随机值会或可能不同)。

根据函数中分配的位置和对象(独立)对象,程序的可观察到的不同行为是一个致命的赠品,即函数中的内存分配有问题。

最新更新