[問題] 有關 new 和 delete
遇到的問題: (題意請描述清楚)
我目前需要使用一個 function 來修改某個陣列的長度及內容
例如:
void change(int *a, int &length)
{
delete [] a;
length += 2;
a = new int [length];
for(int i=0;i<length;i++) a[i] = i+1;
} //把陣列的長度加 2
int main()
{
int length = 3;
int *a = new int [length];
for(int i=0;i<length;i++) a[i] = i+1;
change(a, length);
for(int i=0;i<length;i++) cout<<a[i]<<" ";
cout<<endl; //應該印出 1 2 3 4 5
change(a, length); //再一次
for(int i=0;i<length;i++)cout<<a[i]<<" ";
//應該印出 1 2 3 4 5 6 7
delete [] a;
return 0;
}
上面這個例子的確有跑出預想的結果
但是實際的大程式卻會出問題
而且還是很怪的問題:
陣列 a 的內容在被傳入 change() 一次之後內容沒錯
但是將陣列 a 第二次傳入 change() 之後
回到 main() 以後, a[0] a[1] ... 都變成垃圾值
如果以上的寫法沒有什麼隱藏問題
那我就朝其他方向 debug 了 orz
謝謝各位
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
dev-c++
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.43.22
※ 編輯: jackwei 來自: 118.160.43.22 (09/18 11:49)
→
09/18 11:57, , 1F
09/18 11:57, 1F
→
09/18 11:57, , 2F
09/18 11:57, 2F
推
09/18 12:05, , 3F
09/18 12:05, 3F
※ 編輯: jackwei 來自: 118.160.43.22 (09/18 12:14)
推
09/18 12:15, , 4F
09/18 12:15, 4F
→
09/18 12:25, , 5F
09/18 12:25, 5F
推
09/18 12:30, , 6F
09/18 12:30, 6F
→
09/18 12:49, , 7F
09/18 12:49, 7F
→
09/18 12:50, , 8F
09/18 12:50, 8F
→
09/18 12:51, , 9F
09/18 12:51, 9F
→
09/18 14:57, , 10F
09/18 14:57, 10F
→
09/18 15:44, , 11F
09/18 15:44, 11F
推
09/18 16:12, , 12F
09/18 16:12, 12F
推
09/19 20:42, , 13F
09/19 20:42, 13F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):