1

C++ で curl ライブラリ API のラッパーを作成しました。そして、私はC++のリクエスト/レスポンスにifを使用しようとしています.curl APIがstrerrorを返すため、サーバーに送信する前にリクエストが失敗することがあります.その文字列エラーをアプリケーションに転送しています.それをきれいにする必要がありますか?

私のコードは次のようになります。

int HttpClientImplCurl::get(void*& aOutBuf, base::Size& aOutSize,void*& aOutRecvHeaderBuf, base::Size& aOutRecvHeaderSize, const char*& errorBuff)
{
        HttpClientImplCurlCleaner    lCleaner(this); // Cleans up when it goes out of context
        struct curl_slist*          lHeaders = NULL;

        // setup get
        CURLcode lCode = curl_easy_setopt(curlHandle, CURLOPT_URL,
                                          aInClient.getUrl().getBuffer());

        if (lCode != 0) {
            errorBuff = curl_easy_strerror(lCode);
            return lCode;
        }

}

デストラクタで curl_easy_cleanup(curlHandle) を実行しています。

ここでは、curl_easy_strerror を const char*& errorBuff に設定しています。アプリケーションで使用しています。free(errorBuff) を実行する必要がありますか?

または、次のようにクリーンアップするために使用する必要がある任意のcurlライブラリAPI

struct curl_slist*          lHeaders = NULL;
 lHeaders = curl_slist_append(lHeaders,lMultiHeader.getBuffer());
 curl_slist_free_all(lHeaders);?

それとも不要で、curl_easy_cleanup がクリーンアップを処理しますか?

4

1 に答える 1

4

I am setting curl_easy_strerror... Should I do a free(errorBuff)?

No.

The curl_easy_strerror function uses a string literal to hold the error string which is returned as a const char * pointer[1].

You must not free it.

[1] with const char *p, p points to constant characters. You cannot change the contents.

于 2013-09-06T12:13:10.917 に答える