我在分配/释放内存方面遇到了一个奇怪的问题。我无法显示整个代码本身,所以请使用非常简单的部分代码:
#include <stdio.h>
int main(void)
{
void *ptr;
ptr = malloc(sizeof(node));
/* making sure what the value is when it was initialized */
printf("head_node: %p\n", ptr);
/* i do a lot of things here, such as appending the node, sometimes truncating them */
/* --------------------------------------------------------------------------------*/
/* making sure what the value is still the same: */
printf("head_node: %p\n", ptr);
free(ptr);
printf("done");
}
节点在其他地方声明的地方。
在我释放ptr并且它的初始值在释放它之前它的初始值是相同的并且它不是NULL时,我在Windows中得到错误对话框。
现在这是奇怪的部分。当我在 MinGW 下编译它并在 MSYS(MinGW 控制台外壳)或外部运行它时,它不会遇到任何错误。当我在 MS Visual Express 2012 下构建它并在它下调试它时,它不会遇到任何错误。但是当我在 MS Visual 之外运行由 MS Visual Express 构建的相同程序时,我总是会出错。
更奇怪的是它首先打印出“完成”,这是在错误弹出之前程序的最后一点。在跟踪错误来源时不是很有帮助......
如果在正常的 Windows 环境中发现了任何错误,那么为什么不在 MS Visual 中呢?
这是显示的异常消息:
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1322
Expression: _CrtIsValidHeapPointer(pUserData)