2011-12-31 31 views
2

Cで書かれたcURLライブラリを使用するC++プログラムで作業しています。 cURLハンドルで間違ったURLアドレスに接続しようとすると、例外:cURL libを使用してC/C++で例外をキャッチする

terminate called after throwing an instance of 'std::logic_error' 
what(): basic_string::_S_construct NULL not valid 

このURLをスキップする代わりに、私のプログラムは終了します。ここで は私のコードの抜粋です:

CURL* curl; 
curl_easy_setopt(curl, CURLOPT_URL, "incorrect URL"); 

curl_easy_perform(curl); // this method throws the expection 

私はこのようにそれを処理しようとした:

try{ 
    curl_easy_perform(curl); 
} catch { std::logic_error &e){ 
    return -1; // skip this URL and go futher 
} 

しかし、まだプログラムが終了し、例外が適切に処理されていないようです。

ファイル "stdexcept"が含まれています。

誰でもこのエラーについてよく知っていますが、この例外を正しくキャッチしてプログラムを正常に動作させる方法はありますか?

+0

例外がスローされると、デバッガを接続してスタックトレースを送信します。 –

+1

'curl_easy_perform()'ではなく 'curl_easy_setopt()'が例外を投げるかどうかをチェックしましたか? –

+0

いいえ、私はしませんでした。いい視点ね。私は、新しい年のイブパーティーから結果を投稿して戻った後にチェックします。 – koleS

答えて

0

私はlibcurlエキスパートではありませんが、curl変数にcurl_easy_init()の結果を代入する必要はありませんか?次の2つのカール関数を呼び出す前に?

ETAでは、次のコードでは例外が発生しません。 curl_easy_performの返品はCURLE_COULDNT_RESOLVE_HOST (6)です。

#include <curl/curl.h> 
#include <iostream> 
int main() 
{ 
    CURL* curl = curl_easy_init(); 
    std::cout << curl_easy_setopt(curl, CURLOPT_URL, "incorrect URL") << std::endl; 
    std::cout << curl_easy_perform(curl) <<std::endl; 
} 
+0

もちろん必要ですそれをする。私は、約50行のコードを持っていて誰も答えなかった、全体的な方法で同様のトピックを作成しました。だから私はこのような短い形式で投稿することにしました.. libcurlのすべては正しく設定されています。正しいURLでcurl_easy_perfomを呼び出すと、そのページが表示され、いくつかのものが接続されます。私はちょうど例外をキャッチする方法を知りません。 – koleS

+1

他の質問に答えが得られないのは残念ですが、あなたが作業できないコードを投稿すると私のようなコメントを得るつもりです(ここでは 'curl 'は初期化されていないポインタ値です)。あなたは実際のコードが遭遇するのと同じ例外を示すことができる最も簡単な例にこれを沸かせることができますか? FWIW例外はNULL文字ポインタでstd :: stringを初期化しようとしているようです。 libcurlは(AFAIK)ではC++文字列オブジェクトを使用しないので、何か他のことが起こりそうです。 – huskerchad

+1

あなたはその文字列の誤りについて正しくありました。それはcURLの誤りではありませんでした。接続が失敗した後、私はこのメソッドの結果であると思われる文字列にヌル(接続なし=フェッチされたドキュメントなし)を割り当てようとしていました。それはlogic_errorのケースで、私はすでにそれを修正しましたが、まだそれはcURLからのホストエラーを再現できませんでした。私は別のトピックでコード全体を投稿しました: http://stackoverflow.com/questions/8696201/curl-couldnt-resolve-host-how-to-deal-with-that – koleS

関連する問題