我想malloc的一個巨大的四維陣列(192演出提供)下維數組;但是出現的內容與出現的內容不匹配(請參見下面的代碼中的assert())。 (我做了定義尺寸小,但真正的數字是:20,9000,195,120)C:多維數組使用蓋
#define SIZE_A 1
#define SIZE_B 3
#define SIZE_C 4
#define SIZE_D 2
#define offSet(a,b,c,d) (((size_t) SIZE_A * SIZE_B * SIZE_C * a) + ((size_t) SIZE_B * SIZE_C * b) + ((size_t) SIZE_C * c) + d)
void xall(void)
{
int *aray = (int *) malloc((size_t) SIZE_A * SIZE_B * SIZE_C * SIZE_D * sizeof(int));
int counter = 0;
for (int a = 0; a < SIZE_A; ++a){
for (int b = 0; b < SIZE_B; ++b){
for (int c = 0; c < SIZE_C; ++c) {
for (int d = 0; d < SIZE_D; ++d){
aray[ offSet(a,b,c,d) ] = counter++;
}}}}
counter = 0;
for (int a = 0; a < SIZE_A; ++a){
for (int b = 0; b < SIZE_B; ++b){
for (int c = 0; c < SIZE_C; ++c) {
for (int d = 0; d < SIZE_D; ++d){
int value = aray[ offSet(a,b,c,d) ] ;
assert(value == counter++);
}}}}
}
好一點,但問題是尺寸爲Visual C過大:該陣列的總大小超過4千兆字節,而我得到的有關數組大小的C2148錯誤太大。 – PaeneInsula 2012-02-10 22:58:43
但你可以分配這麼多,並將其分配給一個簡單的指針?我不明白。 – 2012-02-10 23:01:26
如果你的數組大於4GB,你應該把更多的內存放到你的計算機上並使用64位操作系統。 – mikithskegg 2012-02-10 23:03:09