C++指針參數 動態內存分配和釋放


#include <iostream>
using namespace std;

//wrong
void Malloc (int *ip)
{
	//int *p = new int(4);
	//ip = p;

	//ip = new int(4);//wrong
}

void Malloc(int *&ip, int val)
{
	//wrong
	//int *p = ip;
	//p = new int(val);//ip is still NULL

	//ok
	int *p = new int(val);
	ip = p;

	//ok
	ip = new int(val);//ok
}

void ChangeVal(int *&ip,int val)
{
	//ok
	int *p = ip;
	*p = val;
}

//this one is better
void ChangeVal1(int *ip, int val)
{
	//ok
	int *p = ip;
	*p = val;
}

void ChangeAddr(int *&ip)
{
	//wrong
	//int *p = ip;
	//p++;//ip is not changed
	
	//ok
	ip++;//ip is changed
}

//ok, but ip can not be set to NULL
void Free(int *ip)
{
	/*int *p = ip;
	delete p;//ip is deleted
	p = NULL;//ip is not NULL*/

	delete ip;//ip is deleted
	ip = NULL;//ip is not NULL;
}

void Free(int *&ip)
{
	//not good
	/*int *p = ip;
	delete p;//ip is deleted
	p = NULL;//ip is not NULL*/

	//ok
	delete ip;
	ip = NULL;
}

int main()
{
	int *p = NULL;
	Malloc(p,5);
	cout << *p <<endl;//5

	ChangeVal(p,4);
	cout << *p <<endl;//4

	ChangeVal1(p,3);
	cout << *p <<endl;//3

	//cout << (int)p <<endl;
	//ChangeAddr(p);
	//cout << (int)p <<endl;

	Free(p);
	if(p == NULL)
	cout << "p is NULL" <<endl;//NULL

	//cout << *p <<endl;//error

	return 0;
}



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