2013-05-21 2 views
5

C :C : 큰 구조를 관리하는 방법?

큰 배열을 포함하는 구조체를 사용하려고하는데이를 선언하는 동안 스택 오버플로 오류가 발생합니다. 나는 (정확하게?) 스택에 메모리가 충분하지 않아서 힙을 사용해야한다. 스택 메모리 크기를 변경하고 싶지 않다. 다른 사람들이 코드를 사용하기 때문이다. 누구든지 저에게 그것을 간단하게하는 방법을 보여줄 수 있습니까? 아니면 구조가 아닌 다른 것을 사용해야합니까?

내 코드 - definitions.h :

#define a_large_number 100000 

struct std_calibrations{ 
    double E[a_large_number]; 
}; 

내 코드 - main.c를 :

int main(int argc, char *argv[]) 
{ 
    /* ... 
    */ 

    // Stack overflows here: 
    struct std_calibrations calibration; 

    /* ... 
    */ 

    return (0); 
} 

여러분의 도움에 감사드립니다!

+3

'static struct std_calibrations calibration; – BLUEPIXY

답변

7

옵션의 몇 :

  1. 사용 malloc(3)free(3)는 실행시에 동적으로 당신의 구조를 할당합니다. 이 옵션은 "힙을 사용해야한다"고 말할 때 말하는 것입니다.

    struct std_calibrations *calibration = malloc(sizeof *calibration); 
    

    이상

    free(calibration); 
    
  2. 구조가 정적 저장 기간을 준다. static 키워드를 추가하거나 전역으로 설정하십시오. 이 옵션은 구조를 사용하는 방법에 대한 몇 가지 의미를 변경할 수 있지만 예제 코드가 주어지면 괜찮을 것입니다.

+0

고마워요. 조금 어려움을 겪은 후 필자는 나의 구조를 세계화 된 것으로 선언했다. 나중에 코드를 개선하기 위해 나중에 솔루션으로 돌아가 겠지만 지금 당장은 제대로 작동합니다. – user2076688

4

변경 회원 E는 그것을 위해 double*malloc() 메모리가 될 :

struct std_calibrations calibration; 
calibration->E = malloc(sizeof(*calibration->E) * a_large_number); 

필요할 때 더 이상 free(calibration->E);해야합니다. 원하는 경우 에 요소 수를 포함하도록 struct std_calibrations을 확장하여 struct std_calibrations의 사용자가 필요한 요소 수를 결정할 수 있습니다.

관련 문제