1

curl_slist_append 函数定义如下:

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

下面的代码会因为我在进行实际 curl 调用之前释放缓冲区而导致分段错误吗?

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

1 回答 1

2

不,doco声明curl_slist_append() 复制字符串,因此释放原始字符串应该没有影响。

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

可能导致错误的一件事是如果malloc()调用失败,在尝试sprintf().

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

于 2013-07-03T01:37:44.630 回答