2014-05-17 2 views
0

런타임시 C에서 대략 10M 행의 배열을 만들고 싶습니다. 정확한 크기는 런타임에만 알 수 있습니다. 여기에 첫 번째 상처가 있습니다 :C - 런타임시 크기가 10M보다 큰 배열 만들기

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char **argv) 
{ 
    printf("running\n"); 
    long long size = atoi(argv[1]); 
    printf("%lld\n", size); 
    int myArray[size]; 
    printf("allocated array\n"); 
    for (long long i = 0; i< size; i++) { 
    myArray[i] = 1; 
    } 
    printf("Done"); 
} 

내 문제는이 segfaults입니다.

>./a.out 100000000 

running 
100000000 
Segmentation fault: 11 

이 작업을 수행하려면 malloc을 수행해야한다고 생각하지만 올바르게 처리 할 수는 없습니다.

+1

'malloc'으로 무엇을 시도하셨습니까? –

+2

스택이 오버플로되었습니다. 이러한 큰 배열은 힙에 할당됩니다. – Marian

+0

나는 당신의 코드를 시도했지만 어떤'segmentation Fault'도 얻지 못했습니다. – Rocoder

답변

1

자동 할당 실패를 감지 할 수있는 이식성이 없습니다. 리눅스에서는 ulimit -s을 사용하여 확인하고 무제한으로 설정할 수 있습니다 : ulimit -s unlimited.

그러나 이렇게해도 큰 할당이 성공했는지 여부는 알 수 없습니다.

int *myArray = malloc(size * sizeof *myarray); 
    if(!myarray) { /* allocation failed */} 
1

두 가지 제안이 있습니다 :

  1. 은 INT하는 인자를받는 함수를 작성 (또는 어떤 당신이 원하는 입력 안전한 방법은 malloc()를 사용하여 동적 할당을 사용하여 할당이 성공했는지 확인하는 것입니다) 유형을 선택하면 실행 중일 때 값을 입력 할 수 있습니다. 그런 다음 수행 할 수 있습니다.
  2. try malloc.
+0

감사합니다. re (1) 내 주장이 INT에 맞지 않습니다. (2) 이미 이것을 생각했습니다. – hawkeye