【发布时间】:2025-12-07 19:50:05
【问题描述】:
在我使用的库中,由于readv,我遇到了Bad address 错误。
错误的确切来源是什么?是目的地还是源头?
为什么不是segfault呢?
【问题讨论】:
-
使用 Valgrind 运行,准备好调试符号,然后提供更多信息。
在我使用的库中,由于readv,我遇到了Bad address 错误。
错误的确切来源是什么?是目的地还是源头?
为什么不是segfault呢?
【问题讨论】:
Bad Address 是EFAULT 的错误消息,http://linux.die.net/man/2/read 解释说(read() 错误代码与readv() 相同)意味着buf 在进程的可寻址内存之外.对于readv(),这意味着iov(可能,但我想这会导致段错误,因为它只是库-“解释”AFAIK),或者更可能是iov_base-指针之一(已通过到适当的系统调用来实现readv()) 在您的可寻址内存之外; EFAULT 是内核告诉你传入的数据交换指针无效的方式。
检查NULL-pointers 或类似的东西,正如评论者所说:valgrind 可以帮助您诊断问题的根源 - 如果您有可用于库和用户代码的调试符号。
【讨论】:
int 而不是 ssize_t 计算偏移量...叹息。