[問題] QGLViewer 中ptr的傳遞
開發平台(Platform):VC++
額外使用到的函數庫(Library Used):QGLViewer
問題(Question):
最近接手了一位畢業學長的程式,有一個bug令我不得其解,說明如下 (參考後面的code):
class DeformGUI下有個member mSolver(也是一個class)
當鍵盤事件觸發後,他的記憶體位置不知何故變不一樣,裡頭的member 數值都被洗掉
造成後續程式的錯誤
我跟大家我debug時看見的現象,配搭底下的程式碼:
首先win被宣告出來後,執行loadMesh函式
我跳入函式中選擇斷點,此時看見的 mSolver 狀況如附圖1 http://ppt.cc/ZYlc
mSolver有自己的記憶體位置,裡頭的變數也都正常
回到main後,我在底下cout該行停下,此時mSolver的狀況如附圖2 http://ppt.cc/nvEr
亦都正常
然後程式把GUI叫出來,等候鍵盤按下,如圖3 http://ppt.cc/iyzT
鍵盤按下後進入處理函式,此時mSolver的記憶體位置已經不同 (而且都是加1)
裡頭的值也都被洗掉,如附圖4 http://ppt.cc/unli
我不太知道是哪邊出了問題,還請高人指點迷津
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <QApplication>
#include <DeformGUI.h>
#include <OptionParser.h>
int main(int argc, char** argv)
{
OptionParser opt(argc, argv);
std::string mesh = opt.getOption<std::string>("-mesh");
QApplication app(argc, argv);
DeformGUI win;
win.loadMesh( mesh, 10 );
std::cout << "stop here" << std::endl;
// COMMON
win.show();
win.showEntireScene();
return app.exec();
}
DeformGUI.h 中:
class DeformGUI : public QGLViewer
{
....
boost::shared_ptr<GMorpher::Solver> mSolver;
...
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 84.152.45.74
※ 編輯: paulpaulpaul 來自: 84.152.45.74 (12/23 02:09)
→
12/23 02:27, , 1F
12/23 02:27, 1F
→
12/23 02:50, , 2F
12/23 02:50, 2F
→
12/23 02:51, , 3F
12/23 02:51, 3F
推
12/23 09:46, , 4F
12/23 09:46, 4F
→
12/23 09:46, , 5F
12/23 09:46, 5F
推
12/23 10:38, , 6F
12/23 10:38, 6F
推
12/23 18:57, , 7F
12/23 18:57, 7F
→
12/23 18:58, , 8F
12/23 18:58, 8F
→
12/23 19:00, , 9F
12/23 19:00, 9F
→
12/23 19:00, , 10F
12/23 19:00, 10F