• ベストアンサー

Releaseモードで実行すると出るエラー

現在Visual C++を用いてOpenGLを用いたプログラムを作成しています. だいぶ苦労しましたが,ある程度できてきました.しかし,Debugモードで実行するとエラーは出ないのですが,Releaseモードで実行するとエラーが出てしまいます. エラーの内容は以下のとおりです. 「0x0040530f でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x00000010 を読み込み中にアクセス違反が発生しました。」 エラーは_sftbuf.cの→のところで出るようなのですがこの原因はどのようなものが考えられるのでしょうか? int __cdecl _stbuf ( FILE *str ) { REG1 FILE *stream; int index; _ASSERTE(str != NULL); /* Init near stream pointer */ stream = str; /* do nothing if not a tty device */ → if (!_isatty(_fileno(stream))) return(0); /* Make sure stream is stdout/stderr and init _stdbuf index */ if (stream == stdout) index = 0; else if (stream == stderr) index = 1; else return(0); また,Releaseモードで作成したexeファイルをOpenGLのdllが入っていないPCで実行することはできないのでしょうか? よろしくお願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

デバッグモードで発生しないがリリースモードでは発生するというのは、 変数の初期化忘れがあったりすると発生しやすいです。 読み込もうとしたアドレスが 0x00000010 ということですから、 ポインタ変数回りは大丈夫でしょうか? デバイスドライバでもなければ こんな低い番地を読み書きすることはありません。 あと、OpenGLのルーチンの呼び出しをLoadLibraryとGetProcAddressを使って動的にアドレス取得して行っているのでなければ DLLがない環境で起動しようとした時点で、該当DLLがない旨のエラーメッセージが出るはずです(Debugモードでビルドしても同じ)。

karuu
質問者

お礼

回答ありがとうございました. 無事解決しました.

その他の回答 (1)

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.2

1.デバッグはリリースモードでも出来ます。 2.私の場合は、確保したメモリーの長さを越えて 書き込んでいたのが原因でした。 デバッグモードのときは確保してあるメモリーとメモリーの間に隙間があるようです。 リリースモードでは隙間が無くなり、次のデータを 変更してしまって変な動作になっていました。 用心して大きめに取っておきました。 3.DLLが無ければ動かないと思います。 早く原因が見つかることを願っています。

karuu
質問者

お礼

回答ありがとうございました. 無事解決しました.

関連するQ&A