私はユーザーにテキストファイルの名前を尋ねるプログラムを持っています。テキストファイルを開いてそれを使って処理(読み取り、書き込み)を行い、ファイルを閉じてプログラムを終了します。
Program.h
class Program
{
char* fileName;
public:
Program();
~Program();
void ReadFile(void);
};
Program.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
CDCDCDオブジェクトのダンプが完了しました。
プログラム'[10772]program1.exe:Native'がコード0(0x0)で終了しました。
delete []fileName;
それが私がうまくいかなかったと思う理由です。
また、これはどのようにint main()
見えるかです
int main(){
Program abc;
abc.ReadFile();
}
ああ、Program.hは変更できません。.cppのみを変更できます。これは私の要件の一部です。