1


0

私はいつもの方法でgethostbyname()関数を使っています…​

iaHost.s_addr = inet_addr(lpServerName); if(iaHost.s_addr == INADDR_NONE){// IPアドレス文字列ではなかった場合は、名前がlpHostEntry = 0であると想定します。 lpHostEntry = gethostbyname(lpServerName); }

私のWebサイトにアクセスして情報を返す 変数「lpServerName」は、任意のホスト、たとえば「google.com」またはループバック「127.0.0.1」にすることができます。

私のシステム:AMD Opteronシステムで実行されているWindows x64またはx 32(同じエラーが発生しても問題ありません)、XAMPPは私のマシン上にあり、デバッグ目的に使用します。私のコンパイラはMicrosoft Visual c 2005です。

問題は次のとおりです。ループバックアドレスを使用すると、上記のコードは正常に機能します。 コンピュータの外部のWebサイトにアクセスしようとすると、次のエラーが表示されます。 "Windowsがtest_gethostbyname.exeでブレークポイントをトリガしました。 これはヒープの破損が原因である可能性があり、test_gethostbyname.exeまたはそれがロードしたDLLのいずれかのバグを示しています。 出力ウィンドウにはより多くの診断情報があります "#:。 プログラム "test_gethostbyname.exe"には、インターネットへのアクセスに適用される、はるかに大きいプロジェクトからのコードの一部のみが含まれています。 したがって、私が行ったことによってヒープが破損しているとは思われません。 「getaddrinfo」コマンドを試しても同じ結果が得られます。 私は喜んでこの問題に関するあらゆる種類の情報をウェブ上で検索しました(unixシステムでのセグメンテーションフォルトを除く)。

このエラーが発生する原因となる可能性のある、このコマンドに関する問題について誰かが知っていますか?

前もって感謝します、

ジェイ

4 Answer


1


INADDR_NONEをチェックしているようですが、他の障害状態INADDR_ANYについてはどうでしょうか。

gethostbyname()にどのような文字列を渡していますか? lpServerNameの形式に問題がある可能性があります。


0


lpServerNameです。

  • NULLで終わらない

  • ヌル

  • 削除済み

私はそれがNULLで終わっていないと思うでしょう。

たとえinet_addrがNULL終了を見なくても停止するかもしれないので、通常のIPドット付き文字列を使用するときそれが機能する理由です。


0


私は、文字列がヌル文字で終了し、エラーが消えていないかどうかを試しました。 私がコンパイルした例は、Microsoftのgethostname()の記述から得たもので、機能的には正しいと思いますが、それでもエラーが発生します。

今朝、ビジュアルcの高速バージョンを使用している別のマシンで例を再コンパイルしましたが、エラーは発生しません。 したがって、私は自分の開発マシンのライブラリライブラリに問題がある可能性があると疑い始めているので、私はコンパイラとプラットフォームSDKを再インストールして、これが問題を解決するかどうかを確かめます。


0


私は答えを見つけました。 問題は私のXPシステムのライブラリにあるようです。 前述したように、私は問題なく別のXPシステムでプログラムをコンパイルしました。 私は自分の開発システム上でWindows 7とVisual c 8 expressを使ってシステムをコンパイルし、それはうまくいった。