我使用send / recv在C语言中在Unix上编写客户端/服务器程序。我偶尔会从recv调用中获得分段错误。这种行为不是完全可重复的;有时它会发生,有时程序会运行完毕。
任何想法可能意味着什么?
答案 0 :(得分:5)
如果分段错误在recv()
调用本身,那么这意味着您传递给recv()
的缓冲区未正确分配,或者不是您告诉recv()
它的大小是
答案 1 :(得分:3)
嗯,这通常意味着您收到的数据超出了缓冲区所允许的数量。
例如,如果您malloc
20个字节且recv
1000个字节,则会遇到此问题。
不幸的是,如果没有看到代码,并且在精神调试领域没有一些非常迅速的进步,我们永远不会确定 * a 。
* a 顺便说一句,这是发布代码的一个微妙提示: - )
答案 2 :(得分:0)
这也可能意味着在您写入之前,另一侧的套接字已关闭。 这是一个可能导致您的应用程序关闭的SIGPIPE。