内存未分配的指针变量有效。怎么样?

时间:2019-01-03 09:50:56

标签: c

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

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

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

1 个答案:

答案 0 :(得分:0)

正如其他人指出的那样,它是UB。在不引起段错误或类似错误的意义上,您对代码“工作”的观察或多或少是随机的。您在堆栈上分配的另一个变量可能会中分配您的c指针,因此它所指向的位置可以不同(随机)。 (或者换句话说,它的初始随机值会或可能会不同)。

取决于在函数中分配对象的位置和对象的情况下,程序可观察到的不同行为是一个致命的错误,即函数中的内存分配有问题。