エディットボックスを削除した後のエラーをなくすには? – プログラミング – Home

エディットボックスを削除した後のエラー...
 
通知
すべてクリア

[解決済] エディットボックスを削除した後のエラーをなくすには?

固定ページ 1 / 2

cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

初めて質問致します。cha-miと申します。
早速質問に入らせて頂きます。
これまでファイル名を入力してファイルを呼び出すために使っていたエディットボックスが不要になったので削除しました。削除の仕方は、ClassWizardのメンバ変数でそのエディットボックスに与えていたメンバ変数を削除したあと、ダイアログボックス上でエディットボックスを選択し、deleteキーで削除するという、安易な方法で行いました。それ以来、実行は何のエラーもなくできますが、プログラムを終了させるときに、
---------------------------------
Debug Assertion Failed!

Program:C:\test.exe
File:afx.inl
Line:122

For information on how your program can cause an assertion failure,see the Visual C++documentation on asserts.

(Press Retry to debug the application)
---------------------------------

というメッセージボックスが現れ、指定行を見てみると

---------------------------------
{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
---------------------------------
と書いてある行でした。
使用する分には問題ないのですが、他人に渡すプログラムなので体裁が悪いと思い、なんとか無くしたいのです。
どなたか解決策・アドバイスをよろしくお願いいたします。


引用未解決
トピックタグ
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

改行し忘れて横に長くなってしまいました!
すみません!!m(_ _);m


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

DoDataExchangeの削除したエディットIDがある行を直接削除するか
ClassWizardで変数を削除してください。

あと、他人にデバッグ版を渡すのはどうかと思います。
リリース版で渡しましょう。


返信引用
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

Cdsさん、お返事ありがとうございました!

出てきた表示はデバッグのメッセージだから
リリース版では出ないですよね・・・
気づきませんでした、ありがとうございます。

VC++の知識があまりないものでご返事の意味が実は理解できませんでした。
申し訳ありません。
「ClassWizardで変数を削除」って言うのはメンバ変数のことですよね?
(違ってたらごめんなさい!)
それはダイアログ上でエディットボックスを消す前に削除しました。
もう一つの、「DoDataExchangeの削除したエディットIDがある行を直接削除」が
良く分かりませんでしたが、同じことなのでしょうか?


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>もう一つの、「DoDataExchangeの削除したエディットIDがある行を直接削除」が
>良く分かりませんでしたが、

ダイアログベースであれば、そのメンバ関数にDoDataExchange()があり
その関数内に削除した変数が残っていませんか?
残っていたらその行を削除しましょう。 ということではないかしらん?

#誤って他の部分まで削除しないようにしてね!


返信引用
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

Bunさん、お返事ありがとうございます!

えーっと、いろいろやってみた所、下記のようなソースに行き着きました。
===========================
void C*****Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(C**Dlg)
DDX_Text(pDX, IDC_
_EDIT, m_***_edit);
===========================
このことでしょうか?
ここに記述されていたエディタを全て調べてみたところ、
ダイアログに存在しているものしかありませんでした・・・。

他のバグの可能性はありますでしょうか??
エディタを削除するといつも同じバグが出てしまうので困っています。
メンバ変数がないのにプログラム内で変数を使っている時は
ビルドエラーになりますよね?
デバッグは良く分からないので、どなたかご教授お願いします。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

cha-miさん こんにちは。

>{ ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
>と書いてある行でした。

ASSERTマクロはご存じでしょうか?

では、このm_pchDataは何なのか調べてみてはいかがでしょうか?
この変数がNULLになってしまう原因を突き止めれば解決できるかも
知れませんね。

この行はどのクラスのどの部分から呼ばれているのか追跡できますか?


返信引用
ku
 ku
(@ku)
ゲスト
結合: 24年前
投稿: 312
 

1.新規作成でMFC AppWizard(exe)をダイアログベースで作成する
2.リソースエディタでIDC_EDIT1を追加する
3.ClassWizardのメンバ変数の所でIDC_EDIT1をCStringでm_strEdit1として追加する
4.ビルド~実行~正常に動くのを確認する

5.ClassWizardのメンバ変数の所でm_strEdit1を削除する
6.リソースエディタでIDC_EDIT1を削除する
7.リビルド~実行~正常に動くのを確認する

僕の環境ではこれでエディットに割り当てた変数とエディットの削除は
問題なく行えます
これで7でエラーが起きるようなら、何らかの環境が悪いと思います
手近なところではVisualStudioのアンインストール~再インストールでしょうか


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

kuさん こんにちは。いつも、お世話になっています。

実は私もやってみたのですが、問題ありませんでした。
確か5と6の順番をかえたらエラーになったと思います。

>これで7でエラーが起きるようなら、何らかの環境が悪いと思います
>手近なところではVisualStudioのアンインストール~再インストールでしょうか

やっぱり、そういう方法になるのでしょうか。
う~ん。むずかしいですね。


返信引用
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

kuさん、わざわざシミュレートしてくださってありがとうございました。
Bunさんも何度もありがとうございます。

> Bunさん
> ASSERTマクロはご存じでしょうか?

すみません、よく分かりません。
周囲にあるVC++の本を片っ端から見たのですが、
デバッグについて細かく書いていなかったので・・・。
デバッグについて詳しくかいてある文献をご存知ではないでしょうか?

お二人のように自分でも大元のプログラムから再びエディタを消してみました。
ただ単に変数を与えただけのものは、これまでと同じ方法で削除してもエラーは出ませんでしたが、
複雑に使用していたエディタに関して(メッセージ通りならStringを読み込んでいたエディタのみ?)
削除したときにエラーが発生しました。

その時のエラーは、エディタによって得た文字を、更に別の変数に代入していたのですが、
入力エディタがなくなったことによって、その変数に文字を与えるものがなくなってしまったために
エラーが出力されてしまっていました。

出力されたメッセージがこれまでのものと同じだったので、
おそらく、同様のミスなのだろうとは思ったので、変数を中心に
入念に見直してみましたが、ミスした箇所は見つかりませんでした。

こういう時は地道に自分のソースをチェックしていくしかなにのでしょうか?
それともASSERTマクロを使ったりすると大体の場所がわかったりしますか?


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

まず「エディタ」と表現されていますが、これはエディットボックスのことでは
ないでしょうか?

エディタというと、普通はプログラムなどを編集する機能を持ったアプリケーション
を指します。(例えばメモ帳など。VCにはテキストエディタやリソースエディタがありますが・・・)

ASSERT()マクロは ASSERT(TRUE)となるように記述しておくと、FALSEになったら
ひっかかります。ただしデバグモードの場合にのみ有効ですから、製品(リリース時)
には無関係であり、バグをとるためにはたくさん入れておくべきではないでしょうか。

つーわけで、
ASSERT(m_pchData != NULL)の場合は 
普通ではm_pchDataには何か値が入っているべきなのにNULLになったからアサーション
エラーが起きて、ブレークしたわけです。

話はかわりますが、kuさんがおっしゃるように一度別のプロジェクトで同じことを
試されてはいかがでしょうか?
私やkuさんの環境では問題が起きないわけですから、cha-miさんが別のプロジェクトでも
おかしいのであれば、kuさんがおっしゃるように環境の問題の可能性が高いでしょう。
別のプロジェクトでは、おかしくないということであれば現状のものを追跡すれば
よろしいのではないでしょうか?(たいへんかも知れませんが・・・)


返信引用
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

> まず「エディタ」と表現されていますが、これはエディットボックスのことでは
> ないでしょうか?

「エディタ」記述間違いです。
正確には「エディットボックス」です。すみません。

> 話はかわりますが、kuさんがおっしゃるように一度別のプロジェクトで同じことを
> 試されてはいかがでしょうか?

一応、自分でもいろいろ試してみたので(新規で作ってみたりもしました)、
環境のせいではないと思います(研究室のパソコンと自宅のパソコンでも何も変わりはありませんし)。

どこかにミスがあるのだと思うのですが、
お話を伺った感じですと、そう簡単にはこのバグは直せなそうですね。
私がデバッガの使い方をもう少しマスターすれば良いのかもしれませんが・・・。

リリース版には特に影響がないようなので、
余裕のある時に最初から作り直そうかと思います。

丁寧に教えてくださった皆様、本当にありがとうございました。
こういう時は「解決」にチェックしたほうが良いのでしょうか?
それで、いつか原因がわかった時に再び書き込んだ方が良いのでしょうか?
(掲示板初心者なもので申し訳ありません。)


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>正確には「エディットボックス」です。すみません。
知っておいたほうが良いと思って書いただけですよ~。

>リリース版には特に影響がないようなので、
>余裕のある時に最初から作り直そうかと思います。
先に書きましたが、リリース版では検査をしてくれないだけですよ。
トラブルを放置して出すようなものだと思います。

>こういう時は「解決」にチェックしたほうが良いのでしょうか?
チェックはしないで、追いかけるべきですね。

私では力不足かも知れませんが、皆様もいらっしゃいますし
じっくり進めばなんとかなるはずです。
勉強にもなりますし、がんばりましょう。

>一応、自分でもいろいろ試してみたので(新規で作ってみたりもしました)、
>環境のせいではないと思います(研究室のパソコンと自宅のパソコンでも何も変わりはありませんし)。
再現性があるのでしたら、要約して手順をこちらにのせてみませんか?
すぐには解らないかも知れないけど、アドバイス程度ならできるかも。

>どこかにミスがあるのだと思うのですが、
>お話を伺った感じですと、そう簡単にはこのバグは直せなそうですね。
>私がデバッガの使い方をもう少しマスターすれば良いのかもしれませんが・・・。
いや、解りづらい問題だと思いますけど・・・


返信引用
cha-mi
 cha-mi
(@cha-mi)
ゲスト
結合: 23年前
投稿: 9
Topic starter  

>私では力不足かも知れませんが、皆様もいらっしゃいますし
>じっくり進めばなんとかなるはずです。
>勉強にもなりますし、がんばりましょう。
もう少し頑張りたいと思います。
よろしくお願い致します!

プログラムの記述ミスなら・・・と思って自分で記述したソースを
全て削除してみましたがエラーはなくなりませんでした。
ここで全てを削除するのは意味がないのでしょうか?

次に何をすれば良いでしょうか?
(自分なりに色々試してはいますがどれも成果なしです)


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>次に何をすれば良いでしょうか?

どうすれば、そのエラーが出るようになるのでしょうか?
私の環境でも試してみたいので、手順を示して頂けませんか?


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました