c中未初始化指针指向的目标如何确定?

use*_*497 5 c pointers

我知道如果一个指针在C中声明(并且没有初始化),它将指向一个可以包含任何内容的"随机"内存地址.

它实际上指向的地方怎么样?据推测,这不是真正的随机,因为这将是低效和不合逻辑的.

Ale*_*nze 4

如果此指针是在所有函数之外定义的(或者是),则它将在获得控制权之前static初始化。NULLmain()

如果此指针是通过在堆中创建的malloc(sizeof(sometype*)),它将包含其位置上发生的任何内容。它可以是来自先前分配和释放的内存缓冲区的数据。或者它可以是一些旧的控制信息,malloc()用于free()管理空闲和已分配块的列表。或者,如果操作系统(如果有)没有清除程序的内存,或者其系统调用内存分配返回未初始化的内存,那么这些内存可能包含以前运行的程序中的代码/数据,或者只是您的 RAM 芯片在运行时的一些垃圾。系统已上电。

如果此指针是函数的本地指针(并且不是static),则它将包含堆栈上其位置的所有内容。或者,如果将 CPU 寄存器而不是内存单元分配给该指针,则它将包含前面的指令留在该寄存器中的任何值。

所以,它不会是完全随机的,但你很少能完全控制这里。