我不明白这怎么会发生。这是部分的我的代码..

   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()获得所谓的“动态内存”,或者有时从内存“堆。”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top