C++中內存釋放,防止野指針出現

new類型

// 一維數組
int *data = int new[len];
// 釋放內存
delete []data;
data = nullptr;

// 二維數組
int **data = int new[row];
for(int i=0; i<row; i++)
{
	data[i] = new int[col];
}
// 釋放內存
for(int i=0; i<row; i++)
{
	delete []data[i];
	data[i] = nullptr;
}
delete []data;
data = nullptr;

malloc類型

// 一維數組
int *data = (int*) malloc[sizeof(int*) * len];
// 釋放內存
free(data);
data = nullptr;

// 二維數組
int **data = (int**) malloc[sizeof(int*) * row];
for(int i=0; i<row; i++)
{
	data[i] = (int*) malloc[sizeof(int*) * col];
}
// 釋放內存
for(int i=0; i<row; i++)
{
	free(data[i]);
	data[i] = nullptr;
}
free(data);
data = nullptr;

vector類型

vector<int> data;
// 釋放內存
if(!data.empty())
{
 	data.clear();
   	vector<int> tmp;
 	data.swap(tmp);		// 進行交換
}

注:加大括號目的是執行完,程序自動析構。如果是指針類型也需要一個一個釋放。

Mat類型

Mat Img = Mat::zeros(rows, cols, CV_32FC1);
Img.release();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章