Closed. This question is off-topic. It is not currently accepting answers. Learn more。
想改进这个问题吗?Update the question所以堆栈溢出的值小于aa>。
四年前关闭。
我有以下代码:
malloc是一个
在这个结构中,包含一个指针pNext。
正常情况下,
(只需将空值赋给创建的指针)
但是,在系统忙的时候,出现了由
上面对malloc的错误处理似乎很好,有什么问题吗?
也许我不能依赖malloc的返回空值?
到
这解决了上面要检查的一些问题。如果它不编译,则意味着要么省略了
我假设你的代码不是多线程的。
想改进这个问题吗?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