dポイントプレゼントキャンペーン実施中!

VC++2010expressで作成したC++のプログラムがあります。VS内から起動した場合には、デバッグモードでもリリースモードでも問題なく作動するのですが、VS外から、アイコンをクリックして起動すると、malloc()したメモリーをfree()したときに作動停止してしまうことがあります。確率は低いですが、正常に作動する場合もあり、また、free()をコメントアウトすると作動停止しなくなります。メモリーの扱いに問題があるのかと思い、malloc()の直後にfree()してみましたが、同様な症状が見られました。どのような原因が考えられるでしょうか。

A 回答 (2件)

malloc()で取得したした領域を越えてアクセスする。


という動作をする箇所があるのでしょう。

ファイルアクセスとかしていたりはしないですか?
「カレントディレクトリのファイル」をオープンして読み込み。
とかの処理に「オープン出来なかった時」のエラー処理が抜けていたりはしないですか?
VS上からの実行と、エクスプローラなどからexeファイルをダブルクリックなどで起動した場合とではカレントディレクトリが異なったりしますけど……。

OutputDebugString()でデバッグ出力するようにして、外部のモニタツールで確認してみてはどうでしょう?
# もっとも、その変更により問題が出なくなる。なんてコトもあるかも知れませんが……。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おっしゃるとおり、まったく別の場所で、長さlengthの文字列に対してlength+1バイトをalloc()すべきところ、lengthバイトしかalloc()していないところを発見し、それを修正したところ、この問題も起こらなくなりました。初歩的なミスでした。コンパイル時にもエラーにならないし、実行時エラーも散発的に発生、MessageBox等のブレークポイントを入れるとうまく動いてしまったりで、発見に苦労しました。

お礼日時:2012/09/11 20:36

書かれてる内容からいえることは


malloc(),free()の使い方を間違えてそう。
くらいしかないですけど。

せめてどのようなコードを書いてるか書きませんか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
そうですね。わかりにくい質問で申し訳ありませんでした。
なお、問題はすでに解決しました。
お騒がせいたしました。

お礼日時:2012/09/11 20:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!