作者jerrykk (路边小人物)
看板C_and_CPP
标题[问题] 全域动态阵列 释放问题
时间Thu Aug 13 17:00:37 2009
请问我有静态阵列改为一个动态阵列宣告为全域 (程式需要 一定要全域)
但是他的配置是在写在aaa()里面
所以我也把它的记忆体释放摆在aaa()最後面
因为我的程式是用命令列跑大量次数
但是自从我把这个阵列从原本静态改为动态後
自动跑到第三次就会出现当机 (如果手动单跑一次都不会)
我的配置如下
------main.cpp 中---------------------
main
{
for(i=0;i<100;i++) //要跑很多次
aaa(s);
}
--------AAA.cpp 中---------------------
Prev_info ***Shortest=new Prev_info**[2200]; //全域宣告
int aaa(int s)
{
int f1,f2;
for( f1=0;f1<2200;f1++)
{
Shortest[f1]=new Prev_info*[30];
}
for( f1=0;f1<2200;f1++)
{ for( f2=0;f2<30;f2++)
{ Shortest[f1][f2]=new Prev_info[500]; //配置
}
}
有一段程式给全部初始值0
.....
.....
.....
.....
int xx,yy;
for(xx=0;xx<2200;xx++)
{
for( yy=0;yy<30;yy++)
{
delete [] Shortest[xx][yy]; //释放
}
delete [] Shortest[xx];
} delete [] Shortest;
}
----------------------------------------------------------
我原本想说反正整个程式还没结束,就先不要释放,反正每次进aaa我都会再给初始值
不怕数值错误,可是就算拿掉delete那段
也是会在跑到两三次的时候当机
我怀疑是配置全域造成释放有问题,可是却能正常跑过二次
觉得很奇怪 目前也想不出问题出在哪里
谢谢帮忙看完
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.179.7
1F:→ weiyucsie:最後有需要delete[] Shortest吗? 08/13 17:21
2F:→ jerrykk:我有拿掉那段过还是一样 还是说配置也只能一次? 08/13 17:35
3F:推 QQ29:当掉资讯 有办法贴一下嘛 08/13 18:09
4F:推 QQ29:我大概知道你为啥会荡 你***那边只initial一次 你delete掉 08/13 18:14
5F:→ QQ29:进去aaa也没再对他new一次了 所以就有可能触发一些run time 08/13 18:15
6F:→ QQ29:error 08/13 18:15
7F:→ QQ29:hortest=new Prev_info**[2200];写到aaa里面吧 08/13 18:16
8F:→ jerrykk:恩 多谢 应该是这原因 不过我现在把下面配置只有第一次跑 08/13 18:18
9F:→ jerrykk:也可以用了 也是说我现在只配置第一次就好了 08/13 18:18
10F:→ jerrykk:然後delete拿掉 最後跑完再做就好 08/13 18:20
11F:推 QQ29:是你 2楼推文那样嘛? 还有当掉嘛? 08/13 18:29
12F:→ QQ29:不过我比较好奇 为啥不要全部for跑完再一次清 这样overhead 08/13 18:29
13F:→ QQ29:小很多吧 08/13 18:29
14F:→ jerrykk:恩 我已经改成最後才清了 感谢 08/13 18:34