2012-04-09 114 views
0

在我使用的库中遇到Bad address错误,因为readvreadv:错误地址

错误的来源究竟是什么?它是目的地还是来源? 为什么不是segfault呢?

+0

与Valgrind一起运行,准备好调试符号,然后提供更多信息。 – 0xC0000022L 2012-04-09 20:33:25

回答

3

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

检查NULL指标或类似内容,并作为评论者说:valgrind可以帮助您诊断问题的根源 - 如果您的调试符号可用于库和用户代码。

+0

是不好的指针 - 该库使用“int”而不是“ssize_t”叹息地计算偏移量。 – Anycorn 2012-04-10 07:00:33