我有以下代码:
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或类似的工具