作者leehoni (leehoni)
看板C_and_CPP
标题[问题] 请问大阵列宣告後运算出现问题
时间Thu Mar 12 21:32:41 2009
请问各位大大
为了命很大的阵列rt[258][258][500],用了如下方法:
int ***rt=new int**[258];
rt[258] = new int*[258];
rt[258][258] = new int[500];
但是 再运算的时後,却发生问题
for(i=0;i<258;i++)
{for(j=0;j<258;j++)
{for(k=0;k<500;k++)
{
rt[i][j][k]=0; <---这里出现bug
}}}
到底问题出在哪里?
谢谢<(_ _)>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.168.135.93
1F:推 VictorTom:rt[258]是不能用的, size 258所以只有0~257可以用:) 03/12 21:36
2F:→ VictorTom:理论上应该会有memory access violation的错误报出来吧? 03/12 21:36
3F:→ leehoni:不过程式一直到那执行到一行才显示错误@@" 03/12 21:38
4F:推 chrisdar: int ***rt = new int**[258]; 03/12 21:38
5F:→ chrisdar: for (int i = 0;i < 258;++i) { 03/12 21:38
6F:→ chrisdar: rt[i] = new int*[258]; 03/12 21:38
7F:→ chrisdar: for (int j = 0;j < 258;++j) { 03/12 21:38
8F:→ chrisdar: rt[i][j] = new int[500]; 03/12 21:38
9F:→ chrisdar: } 03/12 21:38
10F:→ chrisdar: } 03/12 21:38
11F:→ chrisdar: for (int i = 0;i < 258;++i) { 03/12 21:38
12F:→ chrisdar: for (int j = 0;j < 258;++j) { 03/12 21:38
13F:→ chrisdar: for (int k = 0;k < 500;++k) { 03/12 21:38
14F:→ chrisdar: rt[i][j][k] = 0; 03/12 21:38
15F:→ chrisdar: } 03/12 21:38
16F:→ chrisdar: } 03/12 21:38
17F:→ chrisdar: } 03/12 21:38
※ 编辑: leehoni 来自: 118.168.135.93 (03/12 21:39)
18F:→ chrisdar:很正常阿 ... 不知道哪边错了 03/12 21:39
19F:推 VictorTom:如果像楼上c板友这样应该除非mem要爆了不然应该是ok.... 03/12 21:46
20F:→ VictorTom:可是如果code真的像原po文里写的, 一定mem access vio的 03/12 21:46
21F:→ leehoni:c板大的就不会bug耶 谢谢~~ 不过这样用的原因是什麽阿? 03/12 21:50
22F:推 VictorTom:所以你的code就像你文里写的?? 那就真的是记忆体存取错 03/12 21:51
23F:→ leehoni:对 应该是记忆体存取错了~~ 03/12 21:52
24F:→ VictorTom:误啊, rt[258]是不能用的; 还有, 你要帮rt[0]~[257]一个 03/12 21:52
25F:→ VictorTom:一个跑回圈new, 不能用你原来那样子的写法.... 03/12 21:52
26F:→ VictorTom:在板上找找二维或三维以上动态配置的范例看吧~_~ 03/12 21:53
27F:→ leehoni:3Q~ 03/12 21:53