C-释放指向指针阵列的INT指针单独工作正常,但在主程序中崩溃



此代码段单独工作正常,但是一旦我将其集成到完整的main()函数中,我会发现free(0 ING的问题,有时在第一次迭代时失败,有时会随机失败我和有时尝试释放int指针指针时。

int main()
{
    int** GPRIListedCoords = calloc(sizeof(int*), GPRIMaxVal);
    int i;
    for(i = 0; i < GPRIMaxVal; i++)
        GPRIListedCoords[i] = calloc(sizeof(int) , 2);
    for( i = 0; i < GPRIMaxVal; i++ )
        free(GPRIListedCoords[i]);
    free(GPRIListedCoords);
    return 0;
}

我以同样的方式创建/释放指针(指针)的情况。

我尝试捕获任何无效指针,但没有得到任何指针。

GDB堆栈信息:http://i.snag.gy/z3zqv.jpg

此代码样本看起来不错。我认为问题是在另一种情况下,您 do 用分配的指针做些事情。根据free()的人页(重点是我的)

void free(void *ptr);

free()函数释放由ptr指向的内存空间,该空间必须由以前的调用返回到malloc()calloc()realloc() 。否则,如果之前已经调用了free(ptr),则会发生未定义的行为。如果PTR为NULL,则不会执行操作。

因此,在这种情况下,如果更改了calloc() -ED指针,您将面临未定义的行为。

您可以使用调试器(例如Linux上的gdb)来检查分配的内存位置,并查看指针是否更改。

此代码看起来不错。但是,如果您的代码的任何部分都在调用未定义的行为,那么它可能会损坏内部Malloc数据结构,然后在此处造成崩溃。

您可以在Linux上运行程序吗?我发现使用Valgrind(Linux工具)通常可以摆脱此类错误。

相关内容

  • 没有找到相关文章

最新更新