2015-12-02 4 views
0

Я пытаюсь ввести 2 номера через scanf, но 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()', который дает segfault, а не какую-то другую часть кода? –

+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

спасибо, проблема была на самом деле где-то в другом месте. –

Смежные вопросы