#include "stdafx.h"
#include <iostream>
using namespace std;
//void GetMemory(char **p, int num)
//{
//?*p = (char *)malloc(num);
//}
//void Test(void)
//{
//?char *str = NULL;
//?GetMemory(&str, 100);
//?strcpy(str, "hello");
//?printf(str);
//}
////////////////////////////////////////////////////////
//void Test(void)
//{
//?char *str = (char *) malloc(100);
//?strcpy(str, "hello");
//?free(str);
//?delete str;
//?if(str != NULL)
//?{
//??strcpy(str, "world");
//??printf(str);
//?}
//}


//delete只是釋放內存,不修改指針變量的值
//你需要自己去設置 str=NULL
//delete釋放了堆上面的內存,str是棧上的指針變量
//在void Test(void)函數中,我們只能手動改變str的值,而無法手動釋放指針的內存
//當void Test(void)函數退出時,str本身的內存才釋放掉
/////////////////////////////////////////////////////////
char *GetMemory(void)
{
?char p[] = "hello world";
?return p;
}
void Test(void)
{
?char *str = NULL;
?str = GetMemory();
?printf(str);
}
//////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
?Test();
?getchar();
?return 0;
}

用指針動態分配一段內存空間,指針指向的是這段內存的首地址,同樣的釋放也只是釋放這個指針指向的首地址,也就是說delete str只是釋放了第一個字母h的內存空間。