【发布时间】:2018-04-06 00:41:03
【问题描述】:
当我尝试将值分配给 [0] 时,我似乎无法弄清楚为什么我对 char * [] 的分配给了我一个分段错误。
所以我的意思是,我创建了一个
char * temp[255]
应该在堆中为临时分配空间。因此,当我这样做时
while(buffer)
{
for(num = 0; num < i; num++)
{
if(strcmp(temp[i], buffer) == 0)
{
break;
}
}
/* send menu choice to server indicating client wants list of all files on server */
if (sendto(sock, menuOption, sizeof(menuOption), 0, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0)
{
printf("sendto() sent a different number of bytes than expected");
}
/* receive a response from the server */
fromSize = sizeof(fromAddr);
if ((recvDataLen = recvfrom(sock, buffer, sizeof(buffer), 0, (struct sockaddr *) &fromAddr, &fromSize)) < 0)
{
printf("recvfrom() failed\n");
}
if(serverAddr.sin_addr.s_addr != fromAddr.sin_addr.s_addr)
{
fprintf(stderr,"Error: received a packet from unknown source.\n");
exit(1);
}
/* null terminate the received data */
buffer[recvDataLen] = '\0';
strcpy(temp[i], buffer);
i++;
printf("%s\n", buffer); /* Print the echoed arg */
}
我不应该遇到分段错误,因为 i 已初始化为 0(我没有在此处显示初始化,因为 i 与套接字属性一起设置在文件的顶部)。所以在 while 循环的第一次迭代中,for 循环什么都不做,因为 num 和 i 都为零,因此它继续向服务器发送数据并从服务器检索数据。该数据被放入缓冲区,然后应该被复制到临时。然而,它只是给我一个分段错误和崩溃。任何想法为什么?
【问题讨论】:
-
char * temp[255]为指向char的 255 个指针分配空间。但是,从您显示的代码中,这些指针指向无处,会说没有被初始化。 -
我想,你的意思是,
char temp[255] -
for循环不会增加i... -
您所展示的只是一个包含 255 个未初始化指针的数组。向我们展示初始化代码。
-
编译时包含所有警告和调试信息 (
gcc -Wall -g)。然后使用调试器 (gdb)
标签: c