malloc()的奇怪行为
我有以下代码:malloc()的奇怪行为,c,linux,pointers,malloc,embedded-linux,C,Linux,Pointers,Malloc,Embedded Linux,我有以下代码: if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL) { return ERR_OUT_OF_MEMORY; } ptCurEntry->pNext->pNext = NULL; I malloc一个大小为TISOMStscBoxEntry的空间。 在此结构中,包含一个指针pNext。 在正常情况下,ptCurEntry->p
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()
。如果不这样做,可能会导致取消引用指针,使其具有未定义的行为
if ((ptCurEntry->pNext = (TISOMStscBoxEntry *) malloc(sizeof(TISOMStscBoxEntry))) == NULL)
到
这解决了上面需要检查的一些问题。如果它不编译,则意味着您已经省略了<代码> >包含< /C> >或者编译器是C++编译器而不是C编译器。
我假设您的代码不是多线程的。如果您的应用程序已经发生任何内存损坏,malloc可能会出现异常行为或生成core。因此,请确保valgrind或类似工具没有无效的读/写操作注意:请在
C
@nos中输入malloc()
和family的返回值,也许ptCurEntry->pNext=
是您第一个问题的线索。您说的“系统忙时”是什么意思?只有在系统运行之前发生了什么?<代码> PTCURECTION/COD>在执行此代码之前的值是什么?此外,除非您获得了每括号的数目,请考虑将代码更改为<代码> PTCURIONET> PNET= MALLC(SIEZOF(TISOMSTSCBOX条目));如果(ptCurEntry->pNext==NULL)
if ((ptCurEntry->pNext = malloc(sizeof(*(ptCurEntry->pNext)))) == NULL)