2012-02-10 103 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