最近我正在制作一个程序,它给了我分段错误。使用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] == ' ')){
我无法理解如何解决这个问题。
我想帮助解决和理解这个错误。谢谢!
当程序试图从内存中的非法位置读取/写入时,会发生分段错误。您的函数将继续增加i的值,直到找到'\ n'(换行符)或''(空格)。如果这些条件都没有发生,我将继续递增并可能导致&array [i]指向内存中不可写的位置。
另一方面,函数的名称有点误导,因为通常行结尾标有'\ n'或'\ r'或两者。 A'通常不标记一行结尾。