【问题标题】:readv: Bad addressreadv:错误的地址
【发布时间】:2025-12-07 19:50:05
【问题描述】:

在我使用的库中,由于readv,我遇到了Bad address 错误。

错误的确切来源是什么?是目的地还是源头? 为什么不是segfault呢?

【问题讨论】:

  • 使用 Valgrind 运行,准备好调试符号,然后提供更多信息。

标签: c unix system


【解决方案1】:

Bad AddressEFAULT 的错误消息,http://linux.die.net/man/2/read 解释说(read() 错误代码与readv() 相同)意味着buf 在进程的可寻址内存之外.对于readv(),这意味着iov(可能,但我想这会导致段错误,因为它只是库-“解释”AFAIK),或者更可能是iov_base-指针之一(已通过到适当的系统调用来实现readv()) 在您的可寻址内存之外; EFAULT 是内核告诉你传入的数据交换指针无效的方式。

检查NULL-pointers 或类似的东西,正如评论者所说:valgrind 可以帮助您诊断问题的根源 - 如果您有可用于库和用户代码的调试符号。

【讨论】:

  • 是错误的指针 - 库使用 int 而不是 ssize_t 计算偏移量...叹息。