题
我不明白这怎么会发生。这是部分的我的代码..
int isGoal(Node *node, int startNode){
int i;
.
.
}
当我试使用库我发现,'我'被分配在存储地址,先前已经分配。
(gdb)print &node->path->next
$26 = (struct intNode **) 0xffbff2f0
(gdb) print &i
$22 = (int *) 0xffbff2f0
节点->路径的"下一步"已被定义外,这种功能。但正如可以看到它们共享同一地址,这在某些时候作出的指针指向另一个地方时 我 反而改变。
我编写了使用海湾合作委员会在solaris平台 任何有助于将非常感激..
解决方案
两种可能性:
- 你已经编制了优化,这是令人困惑库(例如
i
可以优化远,因此,它实际上没有任何地址) node->path
不指向正确分配的存储器。例如,指针可能已经设定为点对象上堆之后走出了范围。
其他提示
有i
存储器被取自的堆的,或用C有时被称为 “自动存储”。
的存储器从堆栈分配的内容不再函数声明存储返回之后有效。例如,你的isGoal()
函数分配堆栈存储为变量i
和存储只存在,直到在时间点isGoal()
回报。
您看到i
的地址究其原因,&i
已经你的程序中存在的是栈内存区域不断重复使用。在此之前,你在gdb看到什么,你已经存储在node->path->next
堆栈变量的地址。
要获得存储器中保持有效的分配函数返回之后,你必须使用malloc()
和free()
获得所谓的“动态内存”,或者有时从内存“堆。”
不隶属于 StackOverflow