2013-05-08 162 views
2
for (j = 0; j < d1; j++){ 

    m += j; 
     for (i = 0; i < d1*d2; i +=d2){ 
     cout << *(m+i); 
     } 
    cout << endl; 
} 

D1,D2是陣列尺寸遍歷多陣列指針

int* m = new int [d1*d2]; 

我想穿越了我的陣列和簡單組和打印columns.Can't圖什麼看起來工作正常,直到下面例子中的第3次迭代:

假設我的輸入值是1 2 3 4 5 6 7 8 9

我得到:

1 4 7 

2 5 8 

4 7 (something random) 
+1

你是你的陣列上會出界。如果您使用的是C++,請改爲使用多維向量。 [多維矢量 - 如何](http://stackoverflow.com/a/823600/195488) – 2013-05-08 12:55:40

回答

4

m += j; 

你第一次由0增加m,然後通過一個,然後通過2。如果我們最初把副本

int *start = m; 

然後在外循環的第一次迭代中,我們有

m == start 
在第二

m == start + 1 

第三

m == start + 3 

你想要m == start + 2那裏。除了要保持mdelete它的盡頭,所以你不應該改變m可言,但使用這樣的

for (j = 0; j < d2; j++){ 

     for (i = j; i < d1*d2; i +=d2){ 
     cout << *(m+i); 
     } 
    cout << endl; 
} 
+0

只是一個小錯誤,我猜:第一次迭代必須是j SpiderRico 2013-05-08 13:21:06

+0

@ user2362377對,並且使用非方形矩陣,'*(m + i + j)'也可以訪問越界,所以我現在也修正了這個問題。 – 2013-05-08 13:39:40

1
m = &a[0]; 
for (j = 0; j < d1; j++) 
{ 
    for (i = 0; i < d2; i++) 
     cout << *m++; 
    cout << endl; 
}