C++ 参数被更改为垃圾,即使使用常量调用时也是如此

问题描述 投票:0回答:2

它现在似乎可以正常工作,谢谢。

我的问题是参数似乎在其中一个函数中丢失了。

我在 Windows 7 上使用 Code::Blocks 和 GNU GCC 编译器。

好吧,我有一个需要 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 都会收到愚蠢的长数字。

示例: 我打电话

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

我明白了 _w:3.7648e-039 _h: 7.4044e+031 _x1:345 _y1:4 _x2:5 _y2:6 在 gen_quad_world 函数中。怎么会这样呢?这很奇怪。另外,当我在调试模式下逐行单步执行它时,它有时可以正常工作。

让事情变得更加复杂的是,我有一个几乎相同的函数,称为 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();
}
c++ gcc memory parameters
2个回答
1
投票

您的问题看起来像是使用已删除的对象覆盖其他结构数据 - 检查您的指针上工作的代码 - 确保您没有调用已删除数据的任何方法,将您不再使用的所有指针清除为 NULL (还要确保所有对象都在 ctor 中初始化) - 这将允许您轻松找到已删除对象对 foo-> 的调用


0
投票

看起来您正在调用未初始化对象的方法。像这样:

Foo *foo;
foo->method(1,2,3,4,5,6);
© www.soinside.com 2019 - 2024. All rights reserved.