C 中发送、接收和 NULL 指针的问题

Problem with send, recv and NULL pointer in C

我的代码有一个我完全不明白的问题。这是来自服务器的代码:

usr = uslist_return(&users,i);
if(usr != NULL)
{
            send(client,usr,sizeof(usr),0);
            //Some extra code
}
else
{
            utmp.userid = -1;
            send(client,&utmp,sizeof(utmp),0);
}

这是来自客户端的代码:

recv(sock,tmp,sizeof(tmp),0);
if(tmp->userid > 0)
{
       //Some Code
}
else
{
       //Some other code
}

这里的问题是,虽然我检查 send() 没有发送 NULL 指针,但 send() 发送的指针最终为 NULL。也许它来自 recv()。我一点也不知道。

忽略 uslist_return(...)。它只是一个 returns 指针的函数。并且 utmp 与 usr 是同一类型(但不是指针)。

编辑:服务器在 if 括号中发送一个指针,在 else 括号中发送一个结构。当服务器发送指针 usr 并且客户端获取它并将其保存在指针 tmp (相同类型的指针)中时,就会出现问题。由于这个原因,我还没有检查其他情况。

编辑 2:感谢 Martin James 的评论。看起来 recv() returns -1。 Perror 显示错误是 Bad Address。我不知道这是什么

您似乎混淆了 count 个用户,例如 27 个,size 变量 [=10] =],比方说,8 个字节。 send() 参数 len 是您发送的字节数。如果每条记录大小统一则为count * sizeof(record),否则需要对每条记录的大小求和。

此外,正如您提到的那样,发送指针通常没有意义,因为服务器和客户端使用不同的地址空间。

检查 send()recv() 的 return 值。