內存重疊,以及釋放的測試

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章