我得到一个分段错误free
荷兰国际集团一定指针后:free()之后的分段错误,这是什么原因?
free(studentDB->name);
我可以没有任何错误或警告得到其数值:
printf("[DBG] studentDB->name: %s\n", studentDB->name);
然而,正如我所说的,程序崩溃时我尝试释放它。导致分段错误的free
命令的最常见原因是什么?
我得到一个分段错误free
荷兰国际集团一定指针后:free()之后的分段错误,这是什么原因?
free(studentDB->name);
我可以没有任何错误或警告得到其数值:
printf("[DBG] studentDB->name: %s\n", studentDB->name);
然而,正如我所说的,程序崩溃时我尝试释放它。导致分段错误的free
命令的最常见原因是什么?
如果你没有malloc()
它,你不能free()
它。 studentDB->name
从哪里来?
你可能已经或者免费()“主编它已经,或致电它放在未分配的指针改写超限
从free
段错误可导致缓冲区块前面的malloc的信息与malloc
,或已经free
已经。
如果您发布studentDB->name
分配的代码,这将有所帮助。
通常在程序的其他地方发生堆损坏。堆通常是连续的,并且堆管理器围绕带有标题的堆块来跟踪块 - 如果覆盖该块的标题,访问该标题很好,但free
很可能会失败。
以前有studentDB->name
吗?如果您没有为该字段分配内存,那么很可能是您拨打free
时,最终会出现seg-fault错误!请检查该字段,确保它是malloc
d或strdup
d。
或者是有腐败在堆上别处,与此正好为你正确地指出,你所看到的name
值...
希望这有助于 最好的问候, 汤姆。
如果studentDB为NULL,也可能是访问studentDB指针的名称成员是segfault。
从手册页:
免费(PTR)释放内存空间 ptr所指向的,这一定是 已返回由以前调用 的malloc(),释放calloc()或realloc() 。 否则,或者如果免费(ptr)已经在之前调用过 ,则会发生未定义的 行为。如果ptr为NULL,则不执行 操作。
你也可以检查:
或者您尝试释放它两次。我认为更常见。 – 2010-02-21 21:39:17
现货。这是一个指针,但我没有使用'malloc'来为它分配内存。 – Pieter 2010-02-21 21:39:57