2013-02-20 4 views
-1

그래서 사용자가 명령 줄 인수를 사용하고 atoi를 사용하여 숫자로 변환하는 프로그램이 있습니다. 나는 다음과 같이 출력이 다른 값에 대한 프로그램을 실행하면세그먼트 오류가있는 argv [1]

int no_of_elements_per_thread = 0; 

int main(int argc, char* argv[]) 
{ 
    int status; 
    void* thread_arg;  
    void* res; 
    int i = 0; 

//initialize 
    no_of_elements_per_thread = atoi(argv[1]); 
return 0; 
} 

: 명령 줄에서 전달 된 번호가 여기보다 2048

있는 간단한 프로그램입니다 때까지 모두 잘 작동합니다 :

[adeb1][open-19][~/pre2] ./pre2 210 

[adeb1][open-19][~/pre2] 

내가하려고 흥미롭게 경우 : 값이 작은

[adeb1][open-19][~/pre2] ./pre2 2098 
    Segmentation fault 

Atoi를 사용하지 않고 % s를 가진 printf 나는 여전히 argv [1]와 함께 segmentation fault를 얻는다. 그래서 argv [1]는 2048보다 높은 값으로 문제를 일으키는 것 같습니다.

저는 리눅스에서 gcc를 사용하고 있습니다.

+3

여기에 no_of_elements_per_thread를 게시하지 않은 곳을 신고 하시겠습니까? –

+0

['strtol'] (http://www.kernel.org/doc/man-pages/online/pages/man3/strtol.3.html) ['atoi'] (http : //www.kernel .org/doc/man-pages/online/pages/man3/atoi.3.html). –

+1

인쇄물이있는 한'argc' ** 처음 ** (자체 printf())에 인쇄하십시오. – WhozCraig

답변

0

신고자는 atoi입니다. #include <stdlib.h>이 없으면 아무 것도 없다고 가정합니다.

argv [1]을 사용하기 전에 argc > 1을 보장해야 할 수도 있습니다.

+0

사실 그는 argc가> 1인지 확인해야합니다. –

+0

@HotLicks 사실. 내 잘못이야. 수정 됨. 감사 :) – Sebivor

관련 문제