您的位置:首页 > 移动开发

_CrtIsValidHeapPointer 错误

2017-10-21 12:04 316 查看
参考文档:_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版本中不会弹出警告但仍然是有错的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c-c++ malloc