[問題] 關於動態記憶體delete的用法
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC6.0
程式碼(Code):(請善用置底文網頁, 記得排版)
int size = 10;
double **pp;
pp = new double *[size];
for(int i = 0; i < size; i++)
{
pp[i] = new double [size];
for(int j = 0; j < size; j++)
{
pp[i][j] = i*j;
}
}
問題:
在上面的程式 我用動態記憶體 產生了2維陣列
有借有還 所以我必須使用 delete來還
因為new的是[] 所以理當用 delete []來歸還記憶體
可好了 該怎麼還?
1維的 大可直接 delete []p 就釋放了
如今2維的pp 如果依照邏輯上來說 應該是要
for(i = 0; i < size; i++)
{
delete []pp[i];
}
delete []pp;
感覺非常合理 是嗎?
但是書上的教學是
for(i = 0; i < size; i++)
{
delete pp[i];
}
delete pp;
而且以上兩者都可以在VC6.0裡面順利跑完
當然不知道實際上是否真的釋放了記憶體
可是pp不就是指了一個陣列,陣列的每一格又是指標 等著指向目標
但不論陣列的內容是值或指標 他就是一個陣列 不是嗎?
所以至少 最後一個delete 不就是要 delete []pp嗎?
又如果最後一個是delete []pp了
那for裡面的 就應該不是單純的 delete pp[i]了吧?
因為pp[i] 他們也是一個指向陣列的指標
不知道是我概念垮光了
還是怎麼樣...希望板友給我一些幫助
萬分感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.2.53
※ 編輯: liwmewmew 來自: 218.164.2.53 (10/11 01:31)
推
10/11 01:55, , 1F
10/11 01:55, 1F
→
10/11 01:56, , 2F
10/11 01:56, 2F
→
10/11 02:15, , 3F
10/11 02:15, 3F
→
10/11 02:15, , 4F
10/11 02:15, 4F
→
10/11 02:36, , 5F
10/11 02:36, 5F
→
10/11 03:04, , 6F
10/11 03:04, 6F
→
10/11 03:04, , 7F
10/11 03:04, 7F
→
10/11 03:09, , 8F
10/11 03:09, 8F
推
10/11 07:10, , 9F
10/11 07:10, 9F
→
10/11 08:56, , 10F
10/11 08:56, 10F
→
10/12 08:41, , 11F
10/12 08:41, 11F
→
10/12 09:02, , 12F
10/12 09:02, 12F
→
10/12 09:02, , 13F
10/12 09:02, 13F
推
10/12 13:28, , 14F
10/12 13:28, 14F
→
10/12 13:28, , 15F
10/12 13:28, 15F
→
10/12 13:28, , 16F
10/12 13:28, 16F
→
10/12 13:28, , 17F
10/12 13:28, 17F