最近我在编写程序,这给我带来了段错误。使用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] == ' ')){
我不明白如何解决该问题。
我需要一些帮助来解决和理解此错误。 谢谢!
答案 0 :(得分:1)
当程序尝试从内存中的非法位置读取/写入时,会发生分段错误。您的函数将一直递增i的值,直到找到'\ n'(换行符)或''(空格)为止。如果这两种情况均不发生,我将继续递增,并可能导致&array [i]指向内存中不可写的位置。
另一方面,您的函数名称有点误导,因为通常行尾都标有'\ n'或'\ r'或两者都有。 ''通常不会标记行的结尾。