ある文字列を別の文字列に追加しようとしている。 2つのグローバル文字列変数を宣言します -Valgrindはstring.append(string)に文句を言う。
string grid_filename = "grids/";
string rest;
次に、コマンドライン引数を取得する関数があります。ユーザーがコマンドライン引数にファイル名を入力すると、そのファイルはrestに格納され、次にrestがgrid_filenameに追加されます。
==5602== Address 0x45fdc30 is 0 bytes after a block of size 32 alloc'd
==5602== at 0x402641D: operator new(unsigned int) (vg_replace_malloc.c:255)
==5602== by 0x43039F7: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x4304C77: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x4304DA6: std::string::reserve(unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x43053E9: std::string::append(std::string const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.14)
==5602== by 0x804D5AE: get_command_line_args(int, char**) (main.cpp:74)
==5602== by 0x804F138: main (main.cpp:244)
は、私は、文字列の2つのアドレスをプリントアウトし、それらのいずれも1つのvalgrindのは0バイトであると言っている一致 - 私は私のコードを実行するたびに
else if(strcmp(temp.substr(0,16).c_str(), "--grid-filename=") == 0) {
rest = temp.substr(16,strlen(temp.c_str())-16);
grid_filename.append(rest); //line 74!
}
は今、valgrindのは私に、このエラーが発生します。私はここで何が欠けていますか?
これは、grid_filenameをtcp接続で文字列を送信する別の関数に渡すため、これが私の2番目のエラーにつながると思います。 Valgrindは私に教えてくれます
==5660== Syscall param socketcall.send(msg) points to unaddressable byte(s)
==5660== at 0x404A9B1: send (socket.S:64)
==5660== by 0x804F7C8: main (main.cpp:364)
問題は何ですか?どんな助けもありがとう。必要に応じてコードについて詳しく説明します。
Goodness! ...... –
最初に表示されるエラーメッセージは完全ではありません。実際のエラーメッセージは、貼り付けたテキストのすぐ上になければなりません。つまり、0x45fdc30への読み書きについてです。次に、valgrindは貼り付けたメッセージを表示します。このメッセージには、そのアドレスに関する情報が表示されます。 – wolfgang
私が投稿した2番目のエラーメッセージは、最初に投稿したものの上に表示されます。彼らは分かれていると分かりましたので、私は別々に書きました。メッセージ全体は、 "Syscall param socketcall.send(msg)がアドレスできないバイトを指している"で始まり、 "アドレス0x45fdc30はサイズ32のalloc'd"ブロックの後に0バイトです。 – Sterling