我有以下代码:
if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL)
{
return ERR_OUT_OF_MEMORY;
}
ptCurEntry->pNext->pNext = NULL;
我malloc一个大小为TISOMStscBoxEntry
的空间。
在此结构中,包含指针 pNext 。
在正常情况下,ptCurEntry->pNext->pNext = NULL
正在运行。
(只需为创建的指针指定NULL)
但是,当系统忙时,我遇到了由ptCurEntry->pNext->pNext = NULL
引起的分段错误。
似乎上面对malloc的错误处理很好,它有什么问题?
也许我不能依赖于malloc的返回NULL?
答案 0 :(得分:2)
要检查的事项
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编译器。
我假设您的代码不是多线程的。
答案 1 :(得分:0)