I am currently debugging a sizable program. When I come to the following line of code:
value->binary_string = value_it->binary_string.substr(range->msb->value, range->size);
The program does not behave correctly. Here value is a pointer to a struct with a member named binary_string with type std::string. When I reach this line while debugging, I see that:
value_it->binary_string = "00000000000000000000000000000111"
range->msb->value = 0
range->size = 32
After this line of code executes, value->binary_string is empty! I have even changed the line to
value->binary_string = value_it->binary_string
and it still fails!
When I reach this line while debugging, my program is using about 100 Mb of memory, so I don't think it is a memory issue (though I am running Valgrind as we speak to verify this). I am using Ubuntu 11.10, g++-4.6 and libstdc++6.
Has anyone encountered something like this before? I have no idea why my strings aren't working!
Thanks,
Sam
EDIT1:
The type of value is NumberInst, defined below:
typedef std::string String;
struct NumberInst
{
unsigned size;
bool signed_;
String binary_string;
bool valid;
unsigned value;
NumberInst();
};
EDIT2:
It looks like I've narrowed down the search a little bit. While debugging, I tried a few print commands:
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)
""
It seems that substr is not working properly in this context. However, when I tested substr in my main function, it seemed to work okay.