为什么在if行中出现分段错误?

时间:2018-12-22 16:39:57

标签: c arrays multithreading sockets if-statement

最近我在编写程序,这给我带来了段错误。使用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 :(得分:1)

当程序尝试从内存中的非法位置读取/写入时,会发生分段错误。您的函数将一直递增i的值,直到找到'\ n'(换行符)或''(空格)为止。如果这两种情况均不发生,我将继续递增,并可能导致&array [i]指向内存中不可写的位置。

另一方面,您的函数名称有点误导,因为通常行尾都标有'\ n'或'\ r'或两者都有。 ''通常不会标记行的结尾。