2013-04-21 48 views
-2

我初始化PhysWorld類的實例改變這裏:的Visual C++成員變量意外和無法解釋

enter image description here

此時成員變量如下:

enter image description here

這對我來說似乎是正確的。

,這一行執行:

enter image description here

我們踏進:

enter image description here

而在這一點上,成員變量的樣子:

enter image description here

有人可以幫我理解這裏發生了什麼嗎?這是我在C++中的第一次嘗試之一,所以我猜這是我的愚蠢。

謝謝!在分配

回答

1

你可能鬆動的變量值:

pw = PhysWorld(...); 

本聲明構造了一個臨時的對象,然後進行呼叫:pw.operator=(const PhysWorld&);。檢查你如何實現它(如果你這樣做)。

此外,您的函數setRectDef包含一個嚴重的錯誤:您正在存儲一個指向堆棧變量的指針,該指針在離開函數作用域後無效,稍後訪問它很可能會破壞堆棧。

編輯:如何處理tmpS

您需要在堆中分配的結構:

b2PolygoinShapre *tmpS = new b2PolygoinShape; 
tmpS->SetAsTextBox(...); 
this->rect = tmpS; 
+0

確定這就是爲什麼我不想使用C++,你是什麼意思存儲一個指向堆棧變量?我認爲&tmpS意味着指向tmpS的指針,但我將它分配給應該是指針的成員變量。爲什麼稍後訪問它會毀掉我的堆棧?我很抱歉,但我有很少的經驗與c + + – Mason 2013-04-21 02:16:14

+0

@Mason'tmpS'分配在堆棧上。你正在將指針存儲到'this-> rect'中。離開函數作用域後,'tmpS'對象將被銷燬。所以你只剩下一個指向堆棧中某個區域的指針,它可以被你的程序使用......並且嘗試使用作爲指向'b2PolygoinShape'類型的指針會導致許多有趣的結果。 – 2013-04-21 02:18:58

+0

好的,您能否讓我知道正確的方法是什麼樣子?我現在明白,tmpS不再存在,但我不確定如何讓它堅持下去。 – Mason 2013-04-21 02:21:51