2013-07-03 20 views
1

的curl_slist_append函數的定義如下之後:解放出來一個緩衝將其傳遞給curl_slist_append

struct curl_slist *curl_slist_append(struct curl_slist * list, const char * string); 

可以在下面的原因代碼段錯誤,因爲我解放了實際捲曲呼叫前緩衝器由?

char *buf = malloc(strlen(callname)+strlen("X-EBAY-API-CALL-NAME: ")+1); 
    sprintf(buf, "X-EBAY-API-CALL-NAME: %s", callname); 
    headers = curl_slist_append(headers, buf); 
    free(buf); 

回答

2

沒有,doco指出curl_slist_append()副本的字符串,因此釋放了原本應該沒有影響。

curl_slist_append()將指定的字符串附加到鏈接的字符串列表。現有列表應作爲第一個參數傳遞,而新列表則從此函數返回。當此函數返回時,指定的字符串已被追加。 curl_slist_append()複製字符串。

一件事,可能引起的故障是,如果malloc()調用失敗,你的東西實際上並不在嘗試sprintf()之前檢查。

此外,實際追加本身可能會失敗,在這種情況下,headers將被設置爲NULL。真正的偏執型編碼者(他們往往不是最好的)會檢查這兩種可能性。

相關問題