free函数触发断点c



当我尝试释放数组时,会出现"检测到堆损坏"错误。我的程序有点复杂,所以我将其简化为以下内容:

char ***courses = (char ***)malloc(1, sizeof(char**));
courses[0] = (char**)malloc(2, sizeof(char*));
courses[0][1] = (char*)calloc(5, sizeof(char));
courses[0][0] = "aaaa";
courses[0][1] = "aaaa";
free(courses[0][1]);

当我运行简化表单时,它不会给我"检测到堆损坏"的错误,但它会说"程序触发了断点"。我做错了什么?所有这些错误都是由"自由"函数引起的。

编辑:我忘了在分配课程[0][1]内存的地方添加行。添加了第3行代码。

courses[0][1] = "aaaa";

courses[0][1]指向字符串文字,这不是您分配的内容。因此,未定义的行为结果。

使用free()的规则非常简单:只free()malloc()/calloc()/realloc()函数返回的指针或NULL指针。传递任何其他内容都是无效的。

C11,7.22.3.3,自由功能状态

free函数导致ptr指向的空间为解除分配,也就是说,可用于进一步分配。如果ptr是空指针,则不会发生任何操作。否则,如果参数没有匹配内存管理函数先前返回的指针,或者如果通过调用free或realloc释放了空间,则行为未定义。

相关内容

  • 没有找到相关文章

最新更新