2011-09-14 80 views
-1

glib文檔缺少很多重要的東西,我認爲API文檔絕對應該包括這些東西。例如g_malloc的條目說沒有什麼關於它會在內存分配失敗時崩潰(與名稱暗示它模仿的標準malloc的行爲形成直接對比)。只有當您發現有也一個名爲g_try_malloc變種,並閱讀其描述,你會被告知g_try_mallocg_strdup在內存分配失敗時是否返回NULL?

嘗試分配n_bytes和失敗則返回NULL。使用g_malloc()對比 ,這會在失敗時中止程序。

現在對於這個問題,glib有一個函數g_strdup,它也沒有提及可能返回NULL的任何內容。我認爲它不會,因爲它暗示它將在內部使用g_malloc。會嗎?

+0

這篇文章的語氣是這樣的,我認爲投票結束,因爲有爭議和無建設性;也許你可以讓它少一點咆哮,並更多地堅持你的問題? – ptomato

+0

API設計很困難(http://www.infoq.com/presentations/effective-api-design),但如果某些東西像鴨子一樣走路,說話像鴨子,但事實上卻是一隻鴿子,那是一種嚴重的失敗沒有將這個事實記錄在一個易於訪問的地方(即,與功能描述一起,而不是在其他地方顯示在老虎警告內存處理頁面後面)「。 – hlovdal

+1

我不想爭論API設計或警告的位置。我同意這可能會更好,我理解你的挫敗感,我反對你的對立口吻,以及在你問實際問題之前漫長的漫不經心,Stack Overflow皺起眉頭,但是我沒有投票結束你的我甚至沒有降低它的效果,我認爲你發泄了一些我們都需要不時做的挫折,並且讓你編輯它,這個請求依然存在。 – ptomato

回答

4

儘管如此,文檔確實會這麼說。請查看GLib手冊中的"Memory Allocation"頁面的介紹部分:

如果有任何分配內存的調用失敗,則應用程序終止。這也意味着不需要檢查呼叫是否成功。

這適用於分配內存的任何庫調用,因此也適用於g_strdup()

相關問題