[問題] C和C++語法混用出現一些怪怪的bug

看板C_and_CPP (C/C++)作者 (dennis)時間16年前 (2009/07/21 01:50), 編輯推噓3(306)
留言9則, 2人參與, 最新討論串1/1
請問一下版上有經驗的各位 目前小弟是在改一個程式 這個程式全部是用C的語法在寫 我是打算用C++去extend 但出現了很多以前沒有遇過的bug 不知道是不是因為混用的問題 例如:在用vector的時候不先reverse的話 push_back一定會segmentation fault 或是在malloc的時候也會segmentation fault 不知道版上的各位是否有遇過相同的問題或是有什麼建議?? ------------------------------------------------------- 重新講仔細一點 struct Tree { int id ; Tree* left ; Tree* parent ; Tree* right ; int* vArray; } 在parser.cpp裡面我使用宣告了一個 extern vector<int> vec 並寫入了正確的資料 在metis.cpp裡面include <parser.cpp> 也宣告了一個 extern vector<int> vec 想在metis.cpp用剛剛parse完的結果 但在還沒使用這個 vec 的時候 先跑 //**Tree ------> global pointer //先動態allocateTree的Mem空間(有寫constructor) Tree* itree ; Tree* curTPtr ; sliceTree = new Tree* [numLayer] ; itree = new Tree [numLayer*n] ; curTPtr = itree ; for( i=0 ; i<numLayer ; ++i ) { *(sliceTree+i) = curTPtr ; curTPtr += n ; } //跑兩個迴圈去更改vArray的值 for( i=0 ; i<numLayer ; ++i ) { sliceTree[i][0].vArray = new int[size] ; for( j=0 ; j<numBlock+numPad ; ++j ) { if( blocks[j].layer == i ) { sliceTree[i][0].vArray[ivArray] = -1 ; ivArray++ ; { } } 跑完以後發現他改的不是vArray的值 改到的卻是我parse完以後的 extern vector<int> vec 裡面的值 先謝謝看到這裡的各位大大 因為內容有點長 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.134.141

07/21 03:48, , 1F
http://tinyurl.com/n2q2v5 new≠malloc,這篇很清楚了吧
07/21 03:48, 1F

07/21 14:49, , 2F
可是我改成用new之後 程式還是會亂改其他不該變動的MEM
07/21 14:49, 2F
※ 編輯: osiris1 來自: 140.114.75.128 (07/21 15:09)

07/21 17:27, , 3F
提供資訊不足
07/21 17:27, 3F
※ 編輯: osiris1 來自: 114.37.133.10 (07/21 20:38) ※ 編輯: osiris1 來自: 114.37.133.10 (07/21 20:56)

07/21 21:35, , 4F
你的sliceTree型態應該是Tree**吧?那麼假設numLayer=2; 你有
07/21 21:35, 4F

07/21 21:35, , 5F
對 sliceTree[0]及sliceTree[1]做new嗎?另外,vArray哪來的?
07/21 21:35, 5F

07/21 21:36, , 6F
在 struct Tree 裡面並無 vArray,是吧?
07/21 21:36, 6F

07/21 22:27, , 7F
vArray是打錯了 因為裡面有很多個ptr都要作new的動作
07/21 22:27, 7F

07/21 22:28, , 8F
我只列了一個出來
07/21 22:28, 8F
※ 編輯: osiris1 來自: 114.37.133.10 (07/21 22:28)

07/21 22:29, , 9F
對sliceTree[0] sliceTree[1]作new是沒錯的
07/21 22:29, 9F
文章代碼(AID): #1APAvhbI (C_and_CPP)
文章代碼(AID): #1APAvhbI (C_and_CPP)