寫一個嵌套指針的結構體時候,各種莫名的堆損壞的錯誤,推薦一個工具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是可以的,但是不知道有什麼風險,或者犯了什麼低級錯誤