私は巨大な4D配列ををmallocしようとしている(192ギグ利用可能)カバーの下に1次元配列を使用しました。しかし、何が入ってくるのかは出てくるものと一致しません(下記の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
しかし、それほど割り当てることができ、それを単純なポインタに割り当てることはできますか?理解できません。 –
あなたの配列が4GBより大きい場合は、より多くのメモリをあなたのコンピュータに入れ、64ビットOSを使用する必要があります。 – mikithskegg