munmap_chunk():指针无效(条件错误)

时间:2017-12-01 10:52:55

标签: c pointers

在我通过打印测试代码后,我的代码中出现未知错误我知道导致错误的函数:

void clearTrainSet(){

        struct trainSet * curSet=trnHead;
        struct trainSet * tmp;
puts("z");
        while(curSet!=NULL){
puts("0");
                tmp=curSet;
puts("1");
                curSet=curSet->next;
puts("2");
                free(tmp->input);
puts("3");
                free(tmp->output);
puts("4");
                free(tmp);
puts("x");
        }
        trnHead=NULL;
        if(filename!=NULL){
                free(filename);
                filename=NULL;
        }
puts("c");
}

在测试程序后,结果为:

./neuromz -new 1 2 3 -name dsd
Network initialized successfully.
z
*** Error in `./neuromz': munmap_chunk(): invalid pointer: 0x00007ffde363d2c0 ***
Aborted (core dumped)

所以条件中的错误

1 个答案:

答案 0 :(得分:1)

正如您的评论中所提到的,很明显您传递的指针free并未由malloccallocrealloc返回。这会调用UB(实际上,IMO,你很幸运能得到一个分段错误。它可能是worse)。这是手册页中关于void free(void *ptr);的说法:

  

free()函数释放了必须由ptr指向的内存空间   先前调用了malloc(),calloc()或者   realloc的()。否则,或者如果之前已经调用过free(ptr),   发生未定义的行为。如果ptr为NULL,则不执行任何操作。