1

今は動いているようです、ありがとう。

私の問題は、関数の 1 つでパラメーターが失われているように見えることです。

Windows 7 の GNU GCC コンパイラで Code::Blocks を使用しています。

さて、6 つの GLfloat パラメータを取る関数があります。

void ProMesh::gen_quad_world(GLfloat _w,GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2);

ご覧のとおり、これは ProMesh クラスの一部です。ProMesh には、問題のある gen_quad_world 関数を呼び出す初期化関数があります。

void ProMesh::initialize(GLfloat _w, GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2)
    {
        numverts = 18;
        numtexcoords = 12;
        vert_array = NULL;
        tex_array = NULL;
        id = glGenLists(1);
        gen_quad_world(_w,_h,_x1,_y1,_x2,_y2);
    }

ご覧のとおり、パラメーターを gen_quad_world に渡すだけです。

ここまで大丈夫?

_w と _h の値に関係なく、gen_quad_world はばかげた長い数値を代わりに受け取ります。

例: I CALL

gen_quad_world(1,2,345,4,5,6);

gen_quad_world 関数で _w: 3.7648e-039 _h: 7.4044e+031 _x1: 345 _y1: 4 _x2: 5 _y2: 6 を取得します。どうすればそれが起こりますか?これは非常に奇妙です。また、デバッグモードで行ごとにステップスルーすると、正しく動作することがあります。

これをさらに複雑にしているのは、同じパラメーターを必要とする gen_quad_local と呼ばれるほぼ同一の関数があることです。代わりにそれを使用すると、正常に動作します。

------------------------- gen_quad_world 関数を確認するには、以下をご覧ください----------------- ---

void ProMesh::gen_quad_world(GLfloat _w,GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2)
{
                            std::ofstream myfile("gen_quad_world.txt");
                            myfile<<"_w: "<<_w<<"\n_h: "<<_h<<"\n";
                            myfile<<"_x1: "<<_x1<<"\n_y1: "<<_y1<<"\n";
                            myfile<<"_x2: "<<_x2<<"\n_y2: "<<_y2<<"\n";
                            myfile.close();
    glNewList(id,GL_COMPILE);
        glBegin(GL_TRIANGLES);
            glVertex3f(_w,0,0);
            glVertex3f(0,0,0);
            glVertex3f(0,_h,0);
            glVertex3f(0,_h,0);
            glVertex3f(_w,_h,0);
            glVertex3f(_w,0,0);
        glEnd();
    glEndList();
}
4

2 に答える 2

1

imoあなたの問題は他の構造体データを上書きする削除されたオブジェクトの使用のように見えます-ポインタで動作するコードをチェックしてください-すでに削除されたデータのメソッドを呼び出さないことを確認してください、もう使用しないすべてのポインタをNULLにクリアしてください(またすべてがctorsで初期化されていることを確認してください)-これにより、削除されたオブジェクトのfoo->への呼び出しを簡単に見つけることができます

于 2012-07-17T11:52:52.453 に答える
0

初期化されていないオブジェクトのメソッドを呼び出しているようです。このような:

Foo *foo;
foo->method(1,2,3,4,5,6);
于 2012-07-17T11:37:09.047 に答える