ページ 11

問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 15:28
by ざこ
void CDragDrop6Dlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください

		CString str,str2,str3;
		int num=m_listC.GetSelectionMark();
		str=m_listC.GetItemText(num,0);
		str2=m_listC.GetItemText(num,1);
		str3=str2+_T("\\*.*");
		CFileFind find;
		int NUM;
		CFileIndex Idlg;
		CString filename;
		if(find.FindFile(str3))
		{
			int i=1;
			while(i)
			{
				i=find.FindNextFile();
				if(find.IsDots())
				continue;
				if(find.IsDirectory())
				continue;

				filename=find.GetFileName();
				NUM++;
				MessageBox(filename);
			
				
				*File_Name=filename;
				
				
			
				
			}
			find.Close();
			*number=NUM;
		}
		Idlg.DoModal();
	
	

	*pResult = 0;
}
ヘッダ:CString *File_Name;

このプログラムは指定されたフォルダ内の全てのファイル名を取得して別のダイアログで表示するという
ものです。ずっと考えてたんですがどうしてもわからなくてご質問させていただきました。

*File_Name=filename;


この位置の手前で(MessageBoxから下へ進まない。)どうしてもとまってしまいます。理由は「問題が発生しましたプログラムを終了します」とでます。前回も似た質問をさせていただきましたがあのときはアドレスが渡せていませんでした。今回は値を渡すときに失敗します。原因をどなたか教えて下さい。

※MessageBoxで確認した所filenameの中身は正しいようです。 

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 15:37
by Blue
int* p;
*p = 0;

はエラーになることは理解されていますか?

# あえてポインタを使っている理由がわからない。

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 15:50
by ざこ
理由は別のクラスにアクセスする為です。私もなんか違和感あったんですけど
今まで同じやり方でアクセスできてたものですからwhile文との関係がおかしいと考えてたのですが
指摘されれば確かにエラーになりますねその文だと

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 16:06
by ざこ
ちょっと別の方法で試してみた結果こちらの方が効率よく見やすかったのでこちらで
いきます。ありがとうございました。

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 16:10
by Blue
前も同じようなことで確認方法を示したはずですがやってみましたか?
(コンストラクタでNULL代入し、*File_Nameの直前でNULLチェック)


>理由は別のクラスにアクセスする為です。
だったら、ポインタではなくそのまま実態を渡して戻ってきたらそれをコピーしたほうがミスがないとおもいますけど。
CXXXDlg dlg;
dlg.SetHoge(this->m_Hoge);
if (dlg.DoModal() == IDOK)
{
	this->m_Hoge = dlg.GetHoge();
}
みたいに。

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 16:11
by Blue
>No:30888
根本的な解決になっていないような。
また同じような問題がでて躓きそうな希ガス。

Re:問題が発生しました。プログラムを終了します。

Posted: 2009年3月17日(火) 16:33
by ざこ
激しく同意なのでやってみたところ0x000000でやはり渡っていないようですね。