2012-02-10 106 views
2

我該如何解決Visual Studio Visual C#C2148錯誤?這裏是產生錯誤的代碼:在visual c中是否有全局變量大小限制的解決方法?

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

struct s_ptx { 

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

這產生了VStudio 2010的Visual C錯誤#C2148(在64位編譯): 錯誤C2148:陣列的總尺寸不能超過0x7FFFFFFF的字節

我知道我可以動態地分配pvCount 3d數組,但是之後我必須執行一個數量爲零的免費模式。我有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

這是你到達那裏的一些設置。 :) – 2012-02-10 00:41:17

回答

5

您不需要zillion malloc。只是:

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

編輯:投給size_t是必要的,不會溢出INT。

+0

+1有正確的答案。 – 2012-02-10 01:05:37