#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 delete