2012-04-09 40 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