2010-06-23 2 views
2

GCC + 터미널을 사용하여 소수의 배열을 만들고 있습니다.24 + 비트 색인 배열을 가진 맥북 프로에서 segfault를 얻었습니다

내가 한 번 #[email protected]에 물었지만, 난 아직도 이해가 안 :

32 비트에 값을 저장할 수있는 INT (그래서 2^32 개 고유 한 값의 합계)하지만, 배열에 2^24 이상의 값을 가질 수 없습니까?

잘 모르겠지만, Why 24 bits registers?은 이미 내 질문에 대한 답변입니까?

배열을 만들면 long int이 문제를 해결하지 못합니다. 이 번호를 저장하기 위해 int[][]을 사용하는 것과 같은 (비례하여 빠른) 방법이 있습니까? 또는 숫자를 저장하기 위해 임의의 바이트 수를 사용하는 include 또는 lib?



    int main() 
    { 
     int array1[160000]; 
     printf("first array declared fine.\n"); 
     int array2[170000]; 

     int array3[1600000]; 
     printf("first array declared fine.\n"); 
     int array4[1700000]; 

     int array5[16000000]; 
     printf("first array declared fine.\n"); 
     int array6[17000000]; 
    } 

+0

나는 당신이하고 싶은 것을 아주 좋아하지 않습니다. 그러나 배열은 2^24 이상의 값을 저장하는 데 문제가 없어야합니다. (약 1600 만 엘리먼트 정도) 예제 코드를 제공 할 수 있습니까? – nuriaion

+2

스택에 배열을 만들고 있습니까? 그렇다면 스택 오버 플로우로 인해 segfault가 발생할 수 있습니다. – Job

+0

배열에는 몇 개의 요소가 있습니까? 세분화 오류가 발생한 색인은 어느 색인에서 발생 했습니까? 코드의 문제가되는 영역을 표시 할 수 있습니까? – vpit3833

답변

5

스택에 배열을 만들므로 스택 오버플로로 인한 segfault가 있다고 생각합니다. 나는이 같은 힙에 그런 큰 배열을 만드는 제안 :

int* array = malloc(17000000 * sizeof(int)); 

그래서 당신은 세그먼트 폴트를 얻는 이유는 2^24보다 큰 인덱스를 사용하여 있지만 사실과는 아무 상관이없는 모든 크기 결합 된 배열이 스택 크기보다 커서 스택 오버플로가 발생합니다.

+0

사이트 이름으로 정말 알려지지 않습니까? 아, 그렇습니다. 감사합니다. – gokoon

관련 문제