[問題] delete結構內變數出錯

看板C_and_CPP (C/C++)作者 (.....)時間14年前 (2011/11/13 20:01), 編輯推噓0(0016)
留言16則, 7人參與, 最新討論串1/1
有個問題想請問一下大家 我在程式當中使用了一個結構如下 struct Car{ char *make; int made_year; }; 之後在程式中做了如下的宣告 Car *data = new Car[2]; for(i=0;i<2;i++) data[i].make=new char[20]; 之後想要delete時 for(i=0;i<2;i++) delete [] data[i].make; 這段程式會造成程式中止 原因是為何 以及該如何修改呢? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.69.107

11/13 20:03, , 1F
光看這幾段應該沒問題,檢查你其他地方是不是有存取越界
11/13 20:03, 1F

11/13 20:06, , 2F
car1.make = car2.make 應該錯在這邊
11/13 20:06, 2F

11/13 20:07, , 3F
確實也很可能是像樓上那樣,導致重覆delete
11/13 20:07, 3F

11/13 20:16, , 4F
謝謝樓上各位 我找到問題了
11/13 20:16, 4F

11/13 20:53, , 5F
data[i].make=new char[20];不是應該要間接存取嗎?
11/13 20:53, 5F

11/13 20:56, , 6F
樓上覺得應該要改成什麼樣子呢?
11/13 20:56, 6F

11/13 22:12, , 7F
i沒宣告 (別理我)
11/13 22:12, 7F

11/14 11:45, , 8F
car1.make = car2.make<--請問大家這產生什麼問題?
11/14 11:45, 8F

11/14 11:57, , 9F
(car2.make) double delete, (car1.make) memory leak
11/14 11:57, 9F

11/14 12:00, , 10F
memory leak? I can accpect double delete.But car1
11/14 12:00, 10F

11/14 12:01, , 11F
point car2.
11/14 12:01, 11F

11/14 12:02, , 12F
car1 has no a real memory.So why can it cause leak?
11/14 12:02, 12F

11/14 12:02, , 13F
因為 car1.make 原本有一塊 heap, 而 car1 <- car2 這
11/14 12:02, 13F

11/14 12:03, , 14F
動作,使得car1原本的heap handle 不見,所才memory leak
11/14 12:03, 14F

11/14 12:04, , 15F
仔細看code, for(i=0;i<2;i++) data[i].make=new...
11/14 12:04, 15F

11/14 12:05, , 16F
Orz.. 抱歉,是我該仔細看 code.. 無視樓上。
11/14 12:05, 16F
文章代碼(AID): #1Elx69ZA (C_and_CPP)
文章代碼(AID): #1Elx69ZA (C_and_CPP)