在visual c中是否有解决全局变量大小限制的问题?

时间:2012-02-10 00:21:09

标签: c size malloc global-variables limit

如何解决Visual Studio Visual C#C2148错误?以下是产生错误的代码:

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

struct s_ptx {

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

这会生成VStudio 2010 Visual C(在64位以下编译)错误#C2148:  错误C2148:数组的总大小不得超过0x7fffffff字节

我知道我可以动态分配pvCount 3d数组,但之后我必须做一个无数的alloc和free。我有192 gig的内存,所以我试图找到一个允许这种大小的编译器开关或选项。

编辑:我在试图简化事情时遗漏的复杂问题是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]

1 个答案:

答案 0 :(得分:5)

你不需要zillion mallocs。只是:

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

编辑:转换为size_t是必要的,不要溢出int。