为什么我在这个if行中有分段错误?

问题描述 投票:0回答:1

最近我正在制作一个程序,它给了我分段错误。使用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] == ' ')){ 

我无法理解如何解决这个问题。

我想帮助解决和理解这个错误。谢谢!

c arrays multithreading sockets if-statement
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.