#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的内存空间。