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);
不,doco 声明curl_slist_append()
复制字符串,因此释放原始字符串应该没有影响。
curl_slist_append()
将指定的字符串追加到字符串的链接列表中。现有列表应作为第一个参数传递,同时从此函数返回新列表。此函数返回时,已追加指定的字符串。curl_slist_append()
复制字符串。
可能导致故障的一件事是,如果malloc()
调用失败,您在尝试sprintf()
之前实际上并没有检查。
此外,实际追加本身可能会失败,在这种情况下,headers
将设置为 NULL。真正偏执的程序员(他们通常是最好的那种(会检查这两种可能性。