写一个嵌套指针的结构体时候,各种莫名的堆损坏的错误,推荐一个工具https://blog.51cto.com/danielllf/1598204。
下面是我测试的代码
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char* str = (char*)malloc(32 * sizeof(char));
memset(str, -99, 32);
int ptr =(int)str; //固定指针地址
char *temp;
memcpy(&temp, &ptr, sizeof(char)*32); //使str和temp开辟的内存重叠
memset(temp, -100, 32 * sizeof(char)); //
realloc(temp,32*sizeof(char)); //这一步会报错
free(str); //注释上面一行,这个地方会报错
cout << "释放str" << endl;
free(temp);
cout << "释放temp" << endl;
return 0;
}
按道理来说,定义了两个指针,并且开辟了内存,应该都要释放,但是上面当释放指针str的时候,会报错。
其中,str和temp开辟的指针应该是重叠了,如果只释放temp是可以的,但是不知道有什么风险,或者犯了什么低级错误