我有一个程序,我在其中向用户询问文本文件的名称,打开文本文件对其进行处理(读取,写入),然后关闭文件并退出程序。
程序.h
class Program
{
char* fileName;
public:
Program();
~Program();
void ReadFile(void);
};
程序.cpp
Program::Program(){
//contstructor
fileName=NULL;
}
Program::~Program(){
cout << "in destructor" ;
delete []fileName;
}
void Program::ReadFile(void){
fileName = new char[40];
cout <<"Please enter the name of the file to open: ";
cin.clear();
cin.getline(fileName, 40);
ifstream file (fileName);
if(file.is_open()){
//do stuff
}
file.close();
}
现在,当我放入delete []fileName;
析构函数时,它会在屏幕上输出“”in destructor”,但fileName不会被删除。如果我在fileName被删除后将delete []fileName;
其放入。为什么会这样?ReadFile()
file.close()
我的程序的其余部分运行良好,这就是为什么没有粘贴任何代码的原因。我只是想消除任何内存泄漏,而 fileName 是我唯一遇到的问题,因此我只粘贴了使用 fileName 的代码。
任何帮助表示赞赏。
附加信息:我正在使用 Visual Studio 编写此内容并正在使用内存泄漏检测。这是它的输出:
检测到内存泄漏!
转储对象 ->
{132} 位于 0x005D49A0 的普通块,40 字节长。
数据:6E 61 6D 65 73 2E 74 78 74 00 CD CD CD CD CD CD
对象转储完成。
程序“[10772] program1.exe: Native”已退出,代码为 0 (0x0)。
这就是为什么我怀疑delete []fileName;
没有工作。
也,这就是它的int main()
样子
int main(){
Program abc;
abc.ReadFile();
}
哦,而且 Program.h 不能更改。只有 .cpp 可以更改,这是我的要求的一部分。