2009-02-26 6 views
1

いいえ。だから、私はC++で書かれたファイルを使いたいと思っていました。私はcでコードを実行し、全く問題はなかった。OpenGLに関する問題とCをC++に変換するプロセス

私はCを知らないので、しばらくの間、いくつかの変換ソフトウェアで作業しましたが、それは効果がありませんでした(コーディングフォーマットが必要なスタイルではないと推測していました)。私はそれを自分自身で試してみることにしました。私がしなければならなかったのは、いくつかのmallocステートメントを新しいステートメントに変更し、freeをdeleteに置き換えることでした。だから、私はプログラムを実行し、機能のほとんどが正常に動作しているようだが、これは私にトラブルを与える。私は含ま

glutReshapeWindow(ImageWidth,ImageLength); 
glClear(GL_COLOR_BUFFER_BIT);//these 
glRasterPos2i(0, 0);//three 
glDrawPixels(ImageWidth, ImageLength, GL_RGB, 
    GL_UNSIGNED_BYTE, ImageData);//statements are the ones giving me the error 

私は(私はTIFF形式の画像データを読み込み、画面上に表示しています)私はこれらの特定のステートメントでの問題に実行する新しいイメージの表示を更新しようとしていますコードブロック内の最初のステートメントは、OpenGlコールのどのような種類のものも直ちに吹き飛ばさないことを示しています。

私は、これは一種の漠然としたかもしれないが、何がこのエラーのいくつかの一般的な原因かもしれない知っている

Cannot access memory at address 0xfbad248c 
Cannot access memory at address 0xfbad248c 
Cannot access memory at address 0xaabbeeaa 

の線に沿ってエラーを得続けますか?これはcで動作しましたが、C++へのクイックスイッチでこのエラーが発生した可能性がありますか?

これ以上の情報が必要な場合はお知らせください。


さてさて、私は本当に私は信じている標準のOpenGLライブラリを(これはクラスのためであると私はインストラクターによるライブラリファイルを与えられた)を使用していませんよ。私はコードを持っています

#include <GL/glut.h> 

私の#includeとして。これらのライブラリは、単に私のC++プロジェクトにコピーして貼り付けただけで、cファイルにあるものとまったく同じです。 (私はまた別のC++プロジェクトで限定的な方法でそれらを扱ってきました)。その場合、私はファイルシステム "OPENGL32.DLL"と "GLU32.DLL"をチェックしていませんでした。

私はおそらくこれらの追加の詳細を含める必要があります。

実際の入力ループが呼び出される前に、init()メソッドは、プログラムの開始時に呼び出されます。

void 
init(void) 
{ 
    glClearColor (0.0, 0.0, 0.0, 0.0); 
    glShadeModel(GL_FLAT); 
    makeCheckImage(); 
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
} 

このメソッドは、正常に動作するようです(単純なチェッカーボードパターンは、この関数呼び出しの直後に作成されます)。これらのOpenGLファイルの種類( "OPENGL32.DLL"または "GLU32.DLL")はわかりませんが、うまくいけば、少し問題を絞り込むことができます。

ImageData行については、ImageDataオブジェクトが壊れているとか、並べ替えの原因とは思われません。なぜなら、あなたが話していた理由と、最初のコードブロックのコードがエラーの原因は)のような他のブロック内にある:

if (ImageData == NULL) {/*code*/} 
else{/*this is where the error code is*/} 

あなたはそれだ場合だけのもので、このスレッドを乱雑にしたくない(それが参考になると思われる場合、私はメイクファイルに情報を投稿することができますない)。

答えて

1

エラーを返さない最初のステートメントはGLU32.DLLからのコマンドですが、他のステートメントはOPENGL32.DLLコマンドでなければなりません。ライブラリを正しくリンクし、DLLをプログラムディレクトリにコピーしようとしているかどうかを確認してください。

最後の行もImageDataでエラーが発生する可能性がありますが、C言語で動作し、malloc/freeをnew/deleteに置き換えたと言われているので、何かが間違っているとは考えられません。あまりにも。 OpenGL呼び出しを伴わずにImageData配列全体を読み取る可能性があります。ところで、私は、ImageLengthが完全な画像ファイルの長さではなく、画像の高さであることを願っています。

EDIT:OK、少し違うようです。あなたが投稿したinit関数は他のgl関数にアクセスするように見えるので、あなたのライブラリはどうにか動作します。ところで、DLLを見つけることができなかったのは面白いことです。これらは通常、Windows \ System32パスに格納されます。

「(ImageDataを== NULL)の場合は、」最初のステップですが、あなたはまた、デバッグの目的のために、すべてのImageWidth * ImageLengthエントリを読んしようとする必要があり、おそらくあなたはバイトの間違った番号を割り当てました。クラッシュのため

もう一つの理由は、使用するヘッダファイルは、あなたの通話やDLLを持つに最新ではなく互換性がないことが考えられます。

すべての問題が解決されない場合は、メイクファイルを掲示することは確かに有用であろう。

+0

私は編集で回答しました。 – Chad

+0

「間違ったバイト数」 これはまさに正しいことです。かなり恥ずかしい。私は大いに助けに感謝します。私は神がアーカイブされたOpenGLエラーをどのくらい見ているのかを知るためにサークルで走っていたでしょう。 – Chad

2

私はあなたがCとC++との違いをどのように経験したかわからないので、私はあなたをひいきにしたいが、シュートその価値はありません:

あなたは

unsigned char* data = new unsigned char[size]; //correct 
//.... 
delete[] data; 
を使用しました

(配列割当て) 又は

unsigned char* data new unsigned char(size); //wrong 
//.... 
delete data; 

(値の大きさを有する単一の文字を割り当てる)

あなたの画像データ用に