我目前正在调试一个相当大的程序。当我来到以下代码行时:
value->binary_string = value_it->binary_string.substr(range->msb->value, range->size);
该程序的行为不正确。这里的 value 是一个指向结构的指针,该结构的成员名为 binary_string,类型为 std::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。
有没有人遇到过这样的事情?我不知道为什么我的琴弦不起作用!
谢谢,
山姆
编辑1:
值的类型是 NumberInst,定义如下:
typedef std::string String;
struct NumberInst
{
unsigned size;
bool signed_;
String binary_string;
bool valid;
unsigned value;
NumberInst();
};
编辑2:
看起来我已经缩小了搜索范围。在调试时,我尝试了一些打印命令:
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 无法正常工作。但是,当我在 main 函数中测试 substr 时,它似乎工作正常。