2012-02-10 10 views
2

Visual Studio Visual C#C2148エラーを回避するにはどうすればよいですか?ここでエラーが発生したコードは次のとおりビジュアルCにグローバル変数のサイズ制限の回避策がありますか?

#define ACOUNT 2000 
#define BCOUNT 9000 
#define CCOUNT 195 

struct s_ptx { 

     int pvCount[ACOUNT][BCOUNT][CCOUNT]; 
} ; 

これは、(64ビットの下でコンパイル)VStudio 2010のVisual Cエラー#C2148を生成します エラーC2148:アレイの合計サイズが0x7FFFFFFFでバイトを超えてはならない

I私はpvCountの3d配列を動的に割り当てることができると知っていますが、その後、私は膨大なallocとfreeをやらなければならないでしょう。私は192ギガのメモリを持っているので、私はこのサイズの何かを可能にするコンパイラスイッチまたはオプションを見つけることを試みています。

編集:私は物事を単純化しようとして取り残さ複雑な問題がPTXは、実行時に構造体の配列として使用されているポインタであるということです。私は、コードを実行すると

ptx *Ptx  = (ptx *) calloc(10, sizeof(ptx)); 
for (int i = 0; i < 10; ++i) 
    { 
    Ptx->pv = (int (*)[BCOUNT][CCOUNT]) malloc((unsigned long) ACOUNT * BCOUNT *CCOUNT * sizeof(int)); 

} 


for (int jav = 0; jav < 10; ++jav) 
     for (int j = 0; j < ACOUNT; ++j) 
      for (int k = 0; k < BCOUNT; ++k) 
       for (int m = 0; m < CCOUNT; ++m) 
        Ptx[jav].pv[j][k][m] = j + k + m; 

は、だから私はアクセスを取得違反エラーです。おそらく、動的割り当てを行うことで私はもう使用できなくなるからです。Ptx [jav] .pv [j] [k] [m]

+0

それはあなたがそこにあるいくつかのセットアップです。 :) –

答えて

5

あなたは何百万ものmallocを必要としません。ただ:

int (*arr)[BCOUNT][CCOUNT]=malloc((size_t)ACOUNT*BCOUNT*CCOUNT*sizeof int); 

編集:size_tへのキャストは、int型をオーバーフローしないように、必要です。

+0

+1は正解です。 –

関連する問題