與此相關的https://stackoverflow.com/a/21213612/1423473分配多維數組連續
我想爲3D陣列分配內存的另一個問題連續
T* buff = new T [x * y * z];
for(int i = 0; i < x * y * z; i++) {
buff[i] = 2; // 2 for debug purposes
}
T*** a = new T **[x];
for(int i=0; i<x; ++i)
{
a[i] = (T**)(buff + (i * y * z));
for(int j=0; j<y; ++j)
{
a[i][j] = (T*)(buff + i*y*z + j*z);
for(int k=0; k<z; ++k)
{
a[i][j][k] = 0;
}
}
}
此代碼導致該行a[i][j][k] = 0
在以SIGSEGV執行時間我有這個結果gdb
(gdb) n
343 a[i][j] = (T*)(buff + i*y*z + j*z);
(gdb) x/20d buff
0xbb7350: 2 2 2 2
0xbb7360: 2 2 2 2
0xbb7370: 2 2 2 2
0xbb7380: 2 2 2 2
0xbb7390: 2 2 2 2
(gdb) x/20d a
0x87ac80: 12284752 0 8955856 0
0x87ac90: -134410640 32767 -288938360 32767
0x87aca0: -134496320 32767 -288949632 32767
0x87acb0: -288949584 32767 -288949536 32767
0x87acc0: -134300384 32767 -134795808 32767
(gdb) n
345 for(int k=0; k<z; ++k)
(gdb) x/20d buff
0xbb7350: 12284752 0 2 2
0xbb7360: 2 2 2 2
0xbb7370: 2 2 2 2
0xbb7380: 2 2 2 2
0xbb7390: 2 2 2 2
(gdb) print (int)buff
$6 = 12284752
它看起來很神祕。這段代碼有什麼樣的錯誤?或者有一些替代解決方案?
現在你是[三星級的程序員(http://c2.com/cgi/wiki?ThreeStarProgrammer),恭喜。 ;) – Shoe
我有一個藉口,因爲最初它不是我的代碼=) – erthalion
然後通過編寫一個3D數組類來修復它,該類包含並管理一個連續的塊,並通過三個索引提供對元素的訪問:) – juanchopanza