現在、かなりのプログラムをデバッグしています。次のコード行に到達すると:
value->binary_string = value_it->binary_string.substr(range->msb->value, range->size);
プログラムが正しく動作しません。ここで、value は、std::string 型の binary_string という名前のメンバーを持つ構造体へのポインターです。デバッグ中にこの行に到達すると、次のことがわかります。
value_it->binary_string = "00000000000000000000000000000111"
range->msb->value = 0
range->size = 32
このコード行の実行後、value->binary_string は空です! 行を次のように変更しました
value->binary_string = value_it->binary_string
それでも失敗します!
デバッグ中にこの行に到達すると、私のプログラムは約 100 Mb のメモリを使用しているため、メモリの問題ではないと思います (ただし、これを確認するために Valgrind を実行しています)。Ubuntu 11.10、g++-4.6、および libstdc++6 を使用しています。
誰もこのようなことに遭遇したことがありますか?ストリングが機能しない理由がわかりません。
ありがとう、
サム
EDIT1:
値のタイプは NumberInst で、以下に定義されています。
typedef std::string String;
struct NumberInst
{
unsigned size;
bool signed_;
String binary_string;
bool valid;
unsigned value;
NumberInst();
};
EDIT2:
少し絞って検索したようです。デバッグ中に、いくつかの印刷コマンドを試しました。
print value_it->binary_string
"00000000000000000000000000000111"
print value_it->binary_string[31]
'1'
print value_it->binary_string.substr(0, String::npos)
""
print value_it->binary_string.substr(0, 1)
""
このコンテキストでは substr が正しく機能していないようです。しかし、メイン関数で substr をテストしたところ、問題なく動作しているように見えました。