[問題] 一維動態指標

看板C_and_CPP (C/C++)作者 (麵T)時間10年前 (2015/05/27 00:01), 10年前編輯推噓3(3011)
留言14則, 3人參與, 最新討論串1/1
問題(Question): struct mynode{ //some data }: int n =100; mynode **node = new mynode *[n]; //some code delete []node[n]; 我在 bcb 按鈕中動態配置一個 大小為 n 的指標, 但不知道是 delete 錯了, 還是其他錯誤 造成第一次按按鈕, 跟第二次按按鈕產生不同結果 網路上 c++ 指標教學幾乎都是 二維 [m][n] 的範例, 請問我這樣 new delete 對嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 補充說明(Supplement): -- Sent from my Android -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.178.200 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432656096.A.2C3.html

05/27 00:18, , 1F
mynode *p = new mynode[n];
05/27 00:18, 1F

05/27 00:18, , 2F
delete[] p;
05/27 00:18, 2F
這樣不是指標陣列吧? mynode *p[100]; p[0]~p[99] 都是指標, 而我想把 *p[100] 的 100 用成變數 ※ 編輯: noodleT (39.9.178.200), 05/27/2015 00:45:26

05/27 01:35, , 3F
for(int I=0;I<n;I++)delete[]p[I]
05/27 01:35, 3F

05/27 01:36, , 4F
delete[]p
05/27 01:36, 4F

05/27 10:42, , 5F
樓上正解,但記得初始化成NULL,delete[]前先做檢查先。
05/27 10:42, 5F
我只 new 一次, 為什麼要用迴圈 delete那麼多次? ※ 編輯: noodleT (39.10.11.203), 05/27/2015 12:33:28

05/27 18:03, , 6F
因為你new了100個mynode指標,正常要使用其中的mynode指標
05/27 18:03, 6F

05/27 18:04, , 7F
要進行記憶體配置
05/27 18:04, 7F

05/27 18:06, , 8F
如p[i] = new mynode[5]; <= 有new就要記得delete
05/27 18:06, 8F
mynode **node = new mynode *[n]; for(int i=0;i<n;i++){ mynode[i] = null; } for(int i=0;i<n;i++){ if(node[i]) delete[]node[i]; } delete[]node; 這樣嗎? 那我的mynode struct 中如果有指標,需要在哪裡設 null呢?如果不設,他會亂指嗎? 如: struct mynode{ //some data mynode *left , *right; }: ※ 編輯: noodleT (39.10.11.203), 05/27/2015 19:11:16

05/27 19:05, , 9F
最後再進行delete [] p;
05/27 19:05, 9F

05/27 19:21, , 10F
mynode[i] = NULL // <= 沒配置記憶體就不要delete
05/27 19:21, 10F
用手機發文,沒有改大寫…

05/27 19:22, , 11F
05/27 19:22, 11F
※ 編輯: noodleT (39.10.11.203), 05/27/2015 19:33:05

05/27 19:35, , 12F
參考看看兩種方法
05/27 19:35, 12F

05/27 19:43, , 13F
補充: Method1是c++的Struct才有的寫法
05/27 19:43, 13F

05/27 19:54, , 14F
05/27 19:54, 14F
文章代碼(AID): #1LP9ZWB3 (C_and_CPP)
文章代碼(AID): #1LP9ZWB3 (C_and_CPP)