C++ Prinmer plus 第5版 P106 程序清单4.22内存怎么释放,谢谢
RT
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
char * getname()
{
char temp[80];
cout << "Enter last name: ";
cin >> temp;
char *ps = new char[strlen(temp + 1)];
strcpy(ps,temp);
return ps;
}
int main()
{
char *name;
name = getname();
cout << name << " at " << (int *)name << "\n";
delete []name;//运行到这一行就停止了,而且内存好像也没释放掉,运行窗要强行才能关闭
name = getname();
cout << name << " at " << (int *)name << "\n";
delete []name;
return 0;
}
我在VS2010内跑的,但是不像书中那样可以安全释放内存
请问大家怎么看?
谢谢
[最优解释]
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
char * getname()
{
char temp[80];
cout << "Enter last name: ";
cin >> temp;
char *ps = new char[strlen(temp + 1)]; //new 是在 堆上分配一块内存,需要程序员使用delete[] 手动释放,程序员负责
strcpy(ps,temp);
return ps;
}
int main()
{
char *name;
name = getname();
cout << name << " at " << (int *)name << "\n";
delete []name;//第一次释放,释放时最好使用 name = null;
name = getname();
cout << name << " at " << (int *)name << "\n";
delete []name;//第二次释放,最使用时,最好先判断 if(name) name指向不为null
return 0;
}