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);
答案 0 :(得分:2)
不,doco表示curl_slist_append()
复制字符串,因此释放原文应该没有任何影响。
curl_slist_append()
将指定的字符串附加到字符串的链接列表中。当从该函数返回新列表时,现有列表应作为第一个参数传递。此函数返回时附加了指定的字符串。curl_slist_append()
复制字符串。
可能导致错误的一件事是,如果malloc()
调用失败,那么在尝试sprintf()
之前您实际上没有检查过。
此外,实际附加本身可能会失败,在这种情况下headers
将设置为NULL。真正偏执的程序员(而且他们往往不是最好的那种)会检查这两种可能性。