- ベストアンサー
VS内で問題ないexeファイルが、単独実行できない
VC++2010expressで作成したC++のプログラムがあります。VS内から起動した場合には、デバッグモードでもリリースモードでも問題なく作動するのですが、VS外から、アイコンをクリックして起動すると、malloc()したメモリーをfree()したときに作動停止してしまうことがあります。確率は低いですが、正常に作動する場合もあり、また、free()をコメントアウトすると作動停止しなくなります。メモリーの扱いに問題があるのかと思い、malloc()の直後にfree()してみましたが、同様な症状が見られました。どのような原因が考えられるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
malloc()で取得したした領域を越えてアクセスする。 という動作をする箇所があるのでしょう。 ファイルアクセスとかしていたりはしないですか? 「カレントディレクトリのファイル」をオープンして読み込み。 とかの処理に「オープン出来なかった時」のエラー処理が抜けていたりはしないですか? VS上からの実行と、エクスプローラなどからexeファイルをダブルクリックなどで起動した場合とではカレントディレクトリが異なったりしますけど……。 OutputDebugString()でデバッグ出力するようにして、外部のモニタツールで確認してみてはどうでしょう? # もっとも、その変更により問題が出なくなる。なんてコトもあるかも知れませんが……。
その他の回答 (1)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.1
書かれてる内容からいえることは malloc(),free()の使い方を間違えてそう。 くらいしかないですけど。 せめてどのようなコードを書いてるか書きませんか。
質問者
お礼
ありがとうございます。 そうですね。わかりにくい質問で申し訳ありませんでした。 なお、問題はすでに解決しました。 お騒がせいたしました。
お礼
ありがとうございます。 おっしゃるとおり、まったく別の場所で、長さlengthの文字列に対してlength+1バイトをalloc()すべきところ、lengthバイトしかalloc()していないところを発見し、それを修正したところ、この問題も起こらなくなりました。初歩的なミスでした。コンパイル時にもエラーにならないし、実行時エラーも散発的に発生、MessageBox等のブレークポイントを入れるとうまく動いてしまったりで、発見に苦労しました。