請告訴我與選項 CURLINFO_CONTENT_TYPE 相關的一個時刻:
char *cont_type_pointer = NULL;
curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &cont_type_pointer );
“cont_type_pointer”指標將為 NULL 或指向私有記憶體,您不得釋放它 - 當您在相應的 CURL 句柄上呼叫 curl_easy_cleanup 時,它會被釋放。
這件事不清楚:“你不能釋放它 - 當你呼叫 curl_easy_cleanup 時它會被釋放”
如果在此請求之后我不呼叫 curl_easy_cleanup() 并立即發出另一個請求,我也需要在其中獲取資料 CURLINFO_CONTENT_TYPE ?? 會不會是記憶體泄漏?
“cont_type_pointer”指標沒有釋放上次請求的記憶體,我已經在進行第二次請求了。不清楚。
uj5u.com熱心網友回復:
由于libcurl是一個開源專案,我們可以很容易地自己檢查。curl_easy_getinfo帶有標志CURLINFO_CONTENT_TYPE 只是從CURL*結構回傳內部欄位:
case CURLINFO_CONTENT_TYPE:
*param_charp = data->info.contenttype;
因此要求在使用后不釋放其記憶體。
根據Curl 檔案,您甚至鼓勵多次curl_easy_perform呼叫共享現有連接并curl_easy_cleanup僅在所有操作完成后呼叫:
您可以在使用相同的 easy_handle 的同時對 curl_easy_perform 進行任意數量的呼叫。如果您打算傳輸多個檔案,我們甚至鼓勵您這樣做。然后,libcurl 將嘗試為后續傳輸重新使用相同的連接,從而使操作更快、CPU 占用更少并使用更少的網路資源。請注意,您必須在呼叫之間使用 curl_easy_setopt 來為以下 curl_easy_perform 設定選項。
如果你深入內部,curl_easy_perform你會看到,它libcurl使用內部鏈表來存盤來自所有呼叫的連接資料。當您最終呼叫時,curl_easy_cleanup所有記憶體都將被清除并且不會有任何泄漏。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380462.html
上一篇:C編程指標
