_CrtIsValidHeapPointer 错误
2017-10-21 12:04
316 查看
参考文档:_CrtIsValidHeapPointer出错的解决方法,找到了根本原因啦!
下面是本人编程遇到的:
正确代码:
解释: malloc的时候系统创建了一个链表之类的东西,里面包含了起始地址和长度;而free的时候根据参数中的指针进行判断,如果该指针符合链表中某一节的起始地址,那么就把这一节free掉,如果去free一个不在链表中的地址,就会出错。free掉非malloc起始地址的指针,在debug版本中会出错警告,而在release版本中不会弹出警告但仍然是有错的。
下面是本人编程遇到的:
1 指针的malloc 和 free的问题。
问题代码:BYTE *pBuffer; pBuffer = (BYTE *)malloc(64); pBuffer = pBuffer + 32; free(pBuffer); pBuffer = NULL;
正确代码:
BYTE *pBuffer; BYTE *pBytePtr; pBuffer = (BYTE *)malloc(64); pBytePtr = pBuffer; pBytePtr = pBytePtr + 32; free(pBuffer); pBuffer = NULL; pBytePtr = NULL;
解释: malloc的时候系统创建了一个链表之类的东西,里面包含了起始地址和长度;而free的时候根据参数中的指针进行判断,如果该指针符合链表中某一节的起始地址,那么就把这一节free掉,如果去free一个不在链表中的地址,就会出错。free掉非malloc起始地址的指针,在debug版本中会出错警告,而在release版本中不会弹出警告但仍然是有错的。
相关文章推荐
- 记一次Qt Creator编译产生CrtIsValidHeapPointer的错误
- [转] 调试错误 ASSERTE(_CrtIsValidHeapPointer(pUserData))
- 有关 _CrtIsValidHeapPointer 错误的可能!
- _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
- VS调试错误_ASSERTE(_CrtIsValidHeapPointer(pUserData))
- _ASSERTE(_CrtIsValidHeapPointer(pUserData))错误详解
- C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误
- dll方法调用引发的CrtIsValidHeapPointer错误
- 关于malloc 后free导致的_CrtIsValidHeapPointer(堆错误)错误返回
- 【vc++ 2010问题】使用visual c++/studio 2010编译程序后,出现_CrtIsValidHeapPointer(pUserData)错误
- C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误
- delete释放内存,发生错误,显示DBGHEAP.C中的_ASSERTE(_CrtIsValidHeapPointer(pUserData))
- _CrtIsValidHeapPointer(pUserData) 错误
- VS调试错误_ASSERTE(_CrtIsValidHeapPointer(pUserData))
- 记一次Qt Creator编译产生CrtIsValidHeapPointer的错误
- 调试错误 ASSERTE(_CrtIsValidHeapPointer(pUserData))
- C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误
- opencv findContours 函数出现 \src\dbgheap.c 1322 Expression _CrtIsValidHeapPointer 错误
- C++/CLI程序启动时_CrtIsValidHeapPointer(pUserData)错误
- <Qt> 应用单例模式时重复delete pointer导致_CrtIsValidHeapPointer(block)错误