2012-05-26 2 views
0

argc 인수에 세그먼트 오류 오류가 발생합니다. 나는 C 언어가 처음이다. 이 문제를 해결하도록 도와주세요.C에서 argc에 대한 세그먼트 오류 오류

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

int main(int argc, char *argv[]) 
{ 
    int row1, row2, col1, col2, i, j, cnt=0; 
    int mat1[2000][2000], mat2[2000][2000]; 

    printf("argc=%d", argc); 

    if (argc<5) 
    { 
    printf("\nPlease enter correct arguments <row_no_matrix1> <col_no_matrix1> <row_no_matrix2> <col_no_matrix2>\n"); 
    exit(0); 
    } 

    row1 = atoi(argv[1]); 
    col1 = atoi(argv[2]); 
    row2 = atoi(argv[3]); 
    col2 = atoi(argv[4]); 

    printf("%d %d %d %d\n", row1, row2, col1, col2); 
    return 0; 
} 
+0

"argc 인수에 대한 세그먼트 오류 오류"란 무엇을 의미합니까? 정확한 오류를 게시하십시오. – abelenky

답변

5

매트릭스가 컴퓨터의 스택에 비해 너무 큽니다. 각 배열은 4 백만 개의 정수 또는 대략 16 MiB의 저장 공간을 가지고 있습니다. 이것은 매우 큰 스택 요구 사항입니다.

크기를 줄이거 나 동적으로 할당하십시오.

또는 (코멘트에서 언급 한 바와 같이) 앞에 키워드 static으로 main 내 중, '고정 기간'을 가진 변수로합니다 또한,

int main(int argc, char *argv[]) 
{ 
    int row1, row2, col1, col2, i, j, cnt=0; 
    static int mat1[2000][2000], mat2[2000][2000]; 

또는 파일 범위 변수로

main() 외부 정의 앞의 키워드 static과 :

static int mat1[2000][2000], mat2[2000][2000]; 

int main(int argc, char *argv[]) 
{ 
    int row1, row2, col1, col2, i, j, cnt=0; 

또는 글로벌 변수는 키워드 static없이 main() 외부에서 정의 (그러나 당신이 경우에만이 작업을 수행으로 또한 (다시, 코멘트에서 언급 한 바와 같이) 스택의 크기를 증가시킬 수

int mat1[2000][2000], mat2[2000][2000]; 

int main(int argc, char *argv[]) 
{ 
    int row1, row2, col1, col2, i, j, cnt=0; 

: 이름에 액세스해야하는 여러 소스 파일)을 가지고있다. 그러나, 나는 그것이 아마도 가장 만족스럽지 않은 해결책이라고 제안합니다.

동적으로 배열 크기를 할당하는 방법은 무엇입니까?

공정한 질문입니다. 100x100 어레이에서 얼마나 자주 처리 할 것인가와 비교해 볼 때 얼마나 자주 400 만 개의 셀 어레이가 필요하다고 생각하십니까? 또한 Windows (MSVC 및 C89 포함) 또는 비 Windows (C99 이상 포함) 또는 Windows (GCC 포함)에 있습니까?

또한 포인터에 대해 아직 배웠습니까?

전체적으로 작은 크기의 어레이를 선택해야한다고 생각합니다. 그것은 훨씬 간단한 해결책입니다. 큰 배열을 가져야하는 경우에는 정적으로 할당 된 배열을 사용하십시오.

만약 작동하지 않는다면, 우리는 포인터를 따라 가야 할 것입니다.

+2

.. 또는 '정적'으로 지정하십시오. –

+1

... 또는 스택 크기를 늘리십시오. –

+0

배열의 크기를 동적으로 할당하는 방법은 무엇입니까? – Aps