Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc()的奇怪行为_C_Linux_Pointers_Malloc_Embedded Linux - Fatal编程技术网

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)