[英]Allocated memory address clash
我不明白这是怎么发生的。 这是我的代码的一部分。
int isGoal(Node *node, int startNode){
int i;
.
.
}
当我使用gdb调试时,我发现“ i”已分配到先前已分配的内存地址。
(gdb)print &node->path->next
$26 = (struct intNode **) 0xffbff2f0
(gdb) print &i
$22 = (int *) 0xffbff2f0
在此函数之外已经定义了node-> path-> next。 但是正如您所看到的,当i计数器更改时,它们共享相同的地址,这有时使指针指向另一个位置。
我在solaris平台上使用gcc编译了它。任何帮助将不胜感激。
, or what in C is sometimes called "automatic storage." i
的内存是从 ,或者C中的内容有时称为“自动存储”。
在声明存储已返回的函数之后,从堆栈分配的内存内容不再有效。 例如,您的isGoal()
函数为变量i
分配堆栈存储,并且该存储仅在isGoal()
返回的时间点存在。
在程序执行过程中看到i
, &i
的地址已经存在的原因是,堆栈存储区一直在重复使用。 在gdb中看到之前,您已经将堆栈变量的地址存储在node->path->next
。
为了获得在分配函数返回后仍然有效的内存,必须使用malloc()
和free()
来获取所谓的“动态内存”或有时从“堆”中获取的内存。
两种可能性:
i
可以被优化掉,因此它实际上没有任何地址) node->path
没有指向正确分配的内存。 例如,可以将指针设置为指向堆栈上随后超出范围的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.