C语言 malloc()的奇怪行为



我有以下代码:

if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL)
{
    return ERR_OUT_OF_MEMORY;
}
ptCurEntry->pNext->pNext = NULL;

I malloc一个与TISOMStscBoxEntry大小相同的空间。在这个结构中,包含了一个指针pNext。正常情况下,ptCurEntry->pNext->pNext = NULL工作。(只需将创建的指针赋值为NULL)但是,我得到了分段故障,这是在系统繁忙时ptCurEntry->pNext->pNext = NULL引起的。上面对malloc的错误处理似乎很好,它有什么问题?也许我不能依赖于malloc返回的NULL ?

检查事项

  • ptCurEntry指向一个有效的对象。如果不是这样,访问ptCurEntry->pNext将给出未定义的行为;
  • ptCurEntry->pNext实际上是指向TISOMStscBoxEntry的指针。如果不是,可能是没有分配足够的内存。
  • malloc()调用前,<stdlib.h>已包含。如果不这样做,可能会导致指针解引用,从而产生未定义的行为。

同时,修改

if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL)

if ((ptCurEntry->pNext = malloc(sizeof(*(ptCurEntry->pNext)))) == NULL)

这解决了上面要检查的一些事情。如果它不能编译,这意味着你忽略了#include <stdlib.h>,或者你的编译器是c++编译器而不是C编译器。

我假设你的代码不是多线程的

malloc可能表现异常,如果应用程序已经造成了内存损坏,则会生成core。因此,请确保没有无效的读写与valgrind或类似的工具

相关内容

  • 没有找到相关文章

最新更新