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