如何解决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]
答案 0 :(得分:5)
你不需要zillion mallocs。只是:
int (*arr)[BCOUNT][CCOUNT]=malloc((size_t)ACOUNT*BCOUNT*CCOUNT*sizeof int);
编辑:转换为size_t
是必要的,不要溢出int。