首页 > 解决方案 > 内存未分配指针变量有效。如何?

问题描述

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

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

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

标签: c

解决方案


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

程序的可观察到的不同行为取决于函数中分配的位置和(独立)对象,这完全表明函数中的内存分配存在问题。


推荐阅读