_CrtIsValidHeapPointer 错误

Posted 轩辕泪1020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_CrtIsValidHeapPointer 错误相关的知识,希望对你有一定的参考价值。

参考文档:_CrtIsValidHeapPointer出错的解决方法,找到了根本原因啦!
下面是本人编程遇到的:

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版本中不会弹出警告但仍然是有错的。


以上是关于_CrtIsValidHeapPointer 错误的主要内容,如果未能解决你的问题,请参考以下文章

调试断言失败:_CrtIsValidHeapPointer(pUserData)

C-调试断言失败:_CrtIsValidHeapPointer(block)

_CrtIsValidHeapPointer(pUserData)

_CrtIsValidHeapPointer(pUserdata) AND _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) [重复]

堆损坏 - 调试断言失败。在 dbgheap.c 第 1322 行表达式 _crtIsValidHeapPointer(pUserData)

C++入门——指针与数组——Expression: _CrtIsValidHeapPointer(Block)