recvfrom返回-1,错误号为14(EFAULT),但我传递给它的地址有效。我有一个功能
void foo(void *data_ptr, size_t max_data_size)
{
sockaddr_storage addr_s;
socklen_t len = sizeof(addr_s);
ssize_t nbytes = recvfrom(sock_fd, data_ptr, max_data_size, 0, reinterpret_cast<sockaddr*>(&addr_s), &len);
}
然后我称呼foo
foo_t in_msg;
foo(&in_msg, sizeof(in_msg));
我看不出我该如何给您一个不好的地址。
编辑:看来问题是in_msg的内存在崩溃时以某种方式损坏了。
typedef struct {
int type;
} header_t;
typedef struct {
header_t header_;
char payload[64440];
} foo_t;
foo_t in_msg;
for(int i = 0; i < sizeof(in_msg.payload); i++)
{
in_msg.payload[i] = 1;
}
我不知道为什么。
edit 2:似乎有堆栈溢出正在进行(或类似的操作?),但是尽管有溢出,但并未使程序崩溃。增加我的堆栈大小可以解决此问题。