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



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。真正偏执的程序员(他们通常是最好的那种(会检查这两种可能性。

相关内容

  • 没有找到相关文章