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

C++ C++;参数更改为垃圾,即使使用常量调用也是如此,c++,memory,compiler-construction,parameters,C++,Memory,Compiler Construction,Parameters,现在似乎可以用了,谢谢。 我的问题是其中一个函数中的参数似乎丢失了 我在Windows7上使用GNUGCC编译器的代码::块 好的,我有一个接受6个GLfloat参数的函数 void ProMesh::gen_quad_world(GLfloat _w,GLfloat _h,GLfloat _x1,GLfloat _y1,GLfloat _x2,GLfloat _y2); 正如你所见,这是ProMesh课程的一部分。 在ProMesh中,我有一个初始化函数,它调用有问题的gen_quad_wo

现在似乎可以用了,谢谢。

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

我在Windows7上使用GNUGCC编译器的代码::块

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

例如: 我打电话

我明白了 _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();
}
void ProMesh::gen_quad_world(GLfloat w,GLfloat h,GLfloat x1,GLfloat y1,GLfloat x2,GLfloat y2)
{
std::流myfile(“gen_quad_world.txt”);

myfile看起来您正在调用未初始化对象的方法。如下所示:

Foo *foo;
foo->method(1,2,3,4,5,6);

看起来您正在调用未初始化对象的方法。如下所示:

Foo *foo;
foo->method(1,2,3,4,5,6);


在我看来,您的问题类似于使用已删除的对象覆盖其他结构数据-检查在指针上工作的代码-确保不调用任何已删除数据的方法,清除所有不再使用的指针(同时确保所有指针都在CTOR中初始化)-这将允许您轻松找到对已删除对象的foo->的调用

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

如何调用
initialize
成员函数?您能否提供以下两个函数的实现:
GLfloat
的构造函数(接受
int
参数的构造函数)我期望在大量代码更改后实现与接口不匹配,并且在VS中重建后会消失,
operatorWeirdness,不确定code::blocks是否有类似的“清理然后重建”类型函数?GLfloat不是我的实现,它是OpenGL的一部分。但它似乎被完全视为一个浮点。我用其他数据类型尝试了这些函数,只是为了确定。这看起来像是堆栈损坏。显然,某个地方正在编写存储了
\u w
\u h
的东西。当您抑制其他数据类型时er调用
gen\u quad\u world
,它正在内联,问题消失了。您如何调用
initialize
成员函数?能否为以下两个函数提供实现:
GLfloat
的构造函数(接受
int
参数的构造函数)我期望在大量代码更改后实现与接口不匹配,并且在VS中重建后会消失,
operatorWeirdness,不确定code::blocks是否有类似的“清理然后重建”类型函数?GLfloat不是我的实现,它是OpenGL的一部分。但它似乎被完全视为一个浮点。我用其他数据类型尝试了这些函数,只是为了确定。这看起来像是堆栈损坏。显然,某个地方正在编写存储了
\u w
\u h
的东西。当您抑制其他数据类型时er调用
gen\u quad\u world
,它正在内联,问题就消失了。不。一方面,这一切都发生在ProMesh内部。另一方面,它对一半的参数有效,只有前两个似乎受到了这一问题的困扰。哦,还有奇怪的新开发。在另一个类中有对该函数的调用,但这就是从未使用过。该代码从未运行过。但是,我现在将其更改为使用一个伪函数,突然该函数开始工作?在包含指向ProMesh的指针的类的构造函数中,我将其称为:mesh=new ProMesh(_w,_h,_x1,_y1,_x2,_y2)够了吗s@user1531548:您可以稍后将其删除并调用垃圾指针操作。一方面,这一切都发生在ProMesh内部。另一方面,它适用于一半的参数,只有前两个参数似乎受到此问题的困扰。哦,奇怪的新开发。在另一个类中有对此函数的调用,但hat从未使用过。该代码从未运行过。但是,我现在将其更改为使用一个伪函数,突然该函数开始工作了?在包含ProMesh指针的类的构造函数中,我将其称为:mesh=new ProMesh(_w,_h,_x1,_y1,_x2,_y2);这足够了吗s@user1531548:您可以稍后删除它并调用垃圾指针