2012-02-10 4 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 2,010 카메라 C를 오류 # 1 C2148 (64 비트에 따라 컴파일)이 생성 오류 C2148 : 어레이의 전체 크기는 0x7fffffff 바이트를

I를 초과하지 않아야 내가 동적으로 pvCount 3d 배열을 할당 할 수 있다는 것을 알았지 만, 그때는 무한한 alloc과 free를해야 할 것입니다. 192 기가의 메모리가 있으므로 컴파일러 스위치 나이 크기의 것을 허용하는 옵션을 찾으려고합니다.

편집 : 나는이 코드를 실행하면

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 런타임에 구조체의 배열로 사용되는 포인터가 있다는 것이다 위반 오류입니다. 아마도 동적 할당을 수행하여 더 이상 사용할 수 없기 때문일 수 있습니다. Ptx [jav] .pv [j] [k] [m]

+0

그게 당신이 거기 설치있어. :) –

답변

5

백만 개의 mallocs가 필요하지 않습니다. 단지 :

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

편집 : size_t에 캐스팅이 필요하다 INT 오버 플로우하지.

+0

정답을 가지고있는 +1. –

관련 문제