Closed. This question is off-topic. It is not currently accepting answers. Learn more
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我有以下代码:
if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL)
{
    return ERR_OUT_OF_MEMORY;
}
ptCurEntry->pNext->pNext = NULL;

malloc是一个TISOMStscBoxEntry大小的空间。
在这个结构中,包含一个指针pNext。
正常情况下,ptCurEntry->pNext->pNext = NULL工作。
(只需将空值赋给创建的指针)
但是,在系统忙的时候,出现了由ptCurEntry->pNext->pNext = NULL引起的分割错误。
上面对malloc的错误处理似乎很好,有什么问题吗?
也许我不能依赖malloc的返回空值?

最佳答案

要检查的东西
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编译器。
我假设你的代码不是多线程的。

10-07 17:13