_CrtIsValidHeapPointer 错误

来源:互联网 发布:淘宝双11后生意不好 编辑:程序博客网 时间:2024/05/16 18:35

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