2015-12-02 42 views
0

我試圖通過scanf輸入2個數字,但scanf引發分段錯誤。該計劃的scanf行爲不正常

void add_prog_1(char *host){ 
CLIENT *clnt; 
int *result_1; 
intpair add_1_arg; 
int x; 
int y; 
clnt = clnt_create (host, ADD_PROG, ADD_VERS, "udp"); 
if (clnt == NULL) { 
    clnt_pcreateerror (host); 
    exit (1); 
} else { 

    printf("Connection Established Successfully"); 
    scanf("%d %d",&x ,&y); 
    printf("Input Successfully"); 
    add_1_arg.a = x; 
    add_1_arg.a = y; 

} 

輸出是

Connection Established Successfully 
4 4 
Segmentation fault (core dumped) 

請幫助!

+2

你的scanf調用看起來不錯。你確定它是'scanf()'調用給出了段錯誤而不是代碼的其他部分嗎? –

+1

請使用調試器來解決這類問題。沒有一個完整的例子,我們無法幫助你。 –

+0

@BlueMoon我猜輸出上面的代碼是 '連接成功建立分段錯誤(核心轉儲)'4 4是給出的輸入 –

回答

1

你的問題很可能是在其他地方。 我懷疑第二個printf的輸出沒有被刷新到終端,並且程序繼續運行,直到你稍後在調用函數中某處崩潰。

修改功能,這種方式並重新測試:

printf("Connection Established Successfully\n"); 
scanf("%d %d",&x ,&y); 
printf("Input Successfully\n"); 
fflush(stdout); 
add_1_arg.a = x; 
add_1_arg.a = y; 

你應該學會使用調試器如gdb:當程序命中分段錯誤,操作系統轉儲一個名爲core文件,您可以加載調試器。它包含所有的信息,準確指出故障發生的時間。

+0

謝謝,問題實際上是在別的地方。 –