Почему у меня ошибка сегментации в этой строке? - PullRequest
0 голосов
/ 22 декабря 2018

Недавно я делал программу, и она давала мне ошибку сегментации.После использования gdb я понял, где у меня возникла проблема, но я не могу ее решить.

Функция выглядит следующим образом:

int readSocket_line(int socket, char * array) {
    int i = 0;
    while (1) {
        if (read(socket, & array[i], 1) < 0) {
            return -1;
            break;
        }
        if ((array[i] == '\n') || (array[i] == ' ')) {
            break;
        }
        i++;
    }
    array[i] = '\0';
    return 0;
}

Ошибка, отображаемая gdb, заключается в следующем:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb3df5b40 (LWP 24457)]
0x08048f70 in readSocket_line (socket=18, array=0xb3df5337 "")
    at sockets_clie.c:14
14            if((array[i] == '\n') || (array[i] == ' ')){ 

Я не могу понять, как я могу решить эту проблему.

Мне нужна помощь, чтобы решить и понять эту ошибку.Спасибо!

1 Ответ

0 голосов
/ 22 декабря 2018

Ошибка сегментации возникает, когда программа пытается выполнить чтение / запись из недопустимого места в памяти.Ваша функция будет увеличивать значение i до тех пор, пока не будет найден '\ n' (новая строка) или '' (пробел).Если ни одно из этих условий не будет выполнено, я буду продолжать увеличиваться и может заставить & array [i] указывать на место в памяти, которое не доступно для записи.

С другой стороны, имя вашей функции немного вводит в заблуждение, так какобычно окончания строк помечаются символами '\ n', '\ r' или обоими.«» Обычно не обозначает окончание строки.

...