#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;
}
C++指針參數 動態內存分配和釋放
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.