2012-07-17 61 views
1

IT SEEMS現在正在工作,感謝。C++參數更改爲垃圾,即使使用常量調用

我的問題是,參數似乎在其中一個功能丟失。

我在Windows 7

好使用代碼::塊和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都會收到愚蠢的長號碼。

實施例: 我CALL

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

我GET _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(); 
} 
+0

你如何調用'initialize'成員函數? – Mahesh 2012-07-17 11:42:05

+1

您能否提供以下兩個函數的實現:請參閱'GLfloat'的構造函數(需要'int'參數)和'operator <<(const GLfloat&)'? – YePhIcK 2012-07-17 11:47:46

+0

這樣的古怪我從實現中期望實現不匹配接口後大量的代碼更改,並會在VS中重建所有後,不知道Code :: blocks是否有類似的「乾淨,然後重建」類型的函數? – acraig5075 2012-07-17 11:53:51

回答

0

看起來像你正在調用未初始化對象的方法。就像這樣:

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

沒有。首先,這一切都發生在ProMesh內部。另一方面,它適用於一半的參數,只有前兩個似乎受到這個困擾。 – user1531548 2012-07-17 11:44:09

+0

哦,奇怪的新發展。在另一個類中有一個對這個函數的調用,但是這從來沒有被使用過。該代碼從未運行。但是,我現在改變它使用虛擬函數,突然這個功能工作? – user1531548 2012-07-17 11:45:36

+0

@ user1531548:我仍然認爲你的對象指針是無效的 – Andrew 2012-07-17 11:51:18

1

IMO你的問題看起來都像是用刪除的對象會覆蓋其他結構數據 - 檢查你的代碼,指針上的工作 - 確保你不叫已經刪除數據的任何方法,明確爲NULL你不再使用的所有指針(也要確保所有的指針都在ctors中初始化) - 這將允許你輕鬆地找到對foo->的已刪除對象的調用

+0

謝謝,我會研究一下。 – user1531548 2012-07-17 12:02:56

+0

是你的應用程序多線程? – 2012-07-17 12:04:51