私はいま、高校の課題研究でvc++2010でソフトの製作をしています。
原因のわからないエラーの理由を探るため、よく理解もしていないデバックのブレークポイントを駆使して変数の中身を見て回っているのですが、時折「自動変数」の欄にも「ローカル変数」の欄にも表示されない変数があります。
あれは、どういった理由で表示されないのでしょうか。
ソースすべては長いので載せませんが、問題の部分だけ載せておきます。
char *p;
char *result;
p = (char*)System::Runtime::InteropServices::Marshal:: StringToHGlobalAnsi(data[i]).ToPointer();
//Mecabインスタンスの作成
MeCab::Tagger *tagger = MeCab::createTagger ("");
result = (char*)tagger->parse(p); //←形態素解析されたデータを格納しているのですが、エラーが起こるような処理ではないと思います。
delete tagger;
System::Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(p));
String^ SResult = gcnew String(result); //←ここで「ハンドルされていない例外」が入り、デバックが中断されます
MessageBox::Show(SResult);
resultの中身を見たいのですが、表示されません。
ソースのコメント分のあたりにブレークポイントを入れたときには、*pに正常に値が入っていることが確認できました。
例外が発生したときのメッセージウィンドウの表記
「'System.AccessViolationException' のハンドルされていない例外が guiapp.exe で発生しました。
追加情報: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。」
よくばりですが、例外が発生した原因についても気が付くことがありましたら指摘してください。
わかりづらい文章で申し訳ないですが、よろしくお願いします。
No.2ベストアンサー
- 回答日時:
result = (char*)tagger->parse(p);
delete tagger; ★
taggerがdeleteされたので、そこから返された
resultが指している空間も無効になったと
思います。それで、中身も見えないし、使えば
エラーになるのでしょう。
MessageBoxの後までtaggerをdeleteしない
ようにすれば解決するのでは?
No.3
- 回答日時:
Mecab::Tagger::Parseのリファレンスを見ると、
http://mecab.sourceforge.net/doxygen/classMeCab_ …
You should not delete the returned string.
と書いてあるので、Taggerの内部でメモリを確保しているのでしょうね。
後は#2さんのおっしゃる通り、taggerをdeleteした時にメモリが解放され、
その後の参照により、落ちているのでしょう。
resultは他のメモリを見に行ってるだけですもんね。
その対象がなくなればエラー吐くのも道理でした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonをjupiter notebookからmecabで頻出の高い単語の抽出について(Runt 1 2022/12/17 18:08
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- ドライブ・ストレージ SSDを追加したら昔のHDDがおかしくなった 4 2023/03/23 13:25
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
- Excel(エクセル) [Excel2016] 相関表等の自動作成 2 2022/08/01 20:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
エラー: ‘inval’ の記憶サイズ...
-
C2146を回避するにはどうしたら...
-
Excelのエラーで困ってます。
-
win32api構造体引数の型指定に...
-
fatal error LNK1112
-
Handlesについて
-
ビルド失敗 指定されたファイ...
-
レコードセットをcloseする所で...
-
MakeSureDirectoryPathExists
-
バッチからsqlplusの接続エラー...
-
入れ子になっている構造体配列...
-
左側がクラス、構造体、共用体...
-
デバッグ中のエラーのことで教...
-
fortranでプログラムを実行する...
-
include<wtsapi32.h>でエラーが...
-
VB2008で定数に色の設定をした...
-
不正なメモリ領域へのアクセス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
multiple definitionというエラー
-
WindowsからLinuxへの移植
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報