在将缓冲区传递给curl_slist_append后立即释放缓冲区

时间:2013-07-03 01:35:31

标签: c curl malloc buffer

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);

1 个答案:

答案 0 :(得分:2)

不,doco表示curl_slist_append() 复制字符串,因此释放原文应该没有任何影响。

  

curl_slist_append()将指定的字符串附加到字符串的链接列表中。当从该函数返回新列表时,现有列表应作为第一个参数传递。此函数返回时附加了指定的字符串。 curl_slist_append()复制字符串。

可能导致错误的一件事是,如果malloc()调用失败,那么在尝试sprintf()之前您实际上没有检查过。

此外,实际附加本身可能会失败,在这种情况下headers将设置为NULL。真正偏执的程序员(而且他们往往不是最好的那种)会检查这两种可能性。