重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在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で実行することはできないのでしょうか?
よろしくお願いします.

A 回答 (2件)

デバッグモードで発生しないがリリースモードでは発生するというのは、


変数の初期化忘れがあったりすると発生しやすいです。

読み込もうとしたアドレスが 0x00000010 ということですから、
ポインタ変数回りは大丈夫でしょうか? デバイスドライバでもなければ
こんな低い番地を読み書きすることはありません。

あと、OpenGLのルーチンの呼び出しをLoadLibraryとGetProcAddressを使って動的にアドレス取得して行っているのでなければ
DLLがない環境で起動しようとした時点で、該当DLLがない旨のエラーメッセージが出るはずです(Debugモードでビルドしても同じ)。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/16 19:53

1.デバッグはリリースモードでも出来ます。


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

早く原因が見つかることを願っています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/16 19:54

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