В настоящее время я отлаживаю значительную программу. Когда я прихожу к следующей строке кода:
value->binary_string = value_it->binary_string.substr(range->msb->value, range->size);
Программа не работает правильно. Здесь значение - указатель на структуру с членом с именем binary_string с типом std :: string. Когда я добираюсь до этой строки во время отладки, я вижу, что:
value_it->binary_string = "00000000000000000000000000000111"
range->msb->value = 0
range->size = 32
После выполнения этой строки кода значение-> двоичная_строка пуста! Я даже изменил строку на
value->binary_string = value_it->binary_string
и все равно не получается!
Когда я добираюсь до этой строки во время отладки, моя программа использует около 100 МБ памяти, поэтому я не думаю, что это проблема с памятью (хотя я запускаю Valgrind, как мы говорим, чтобы проверить это). Я использую Ubuntu 11.10, g ++ - 4.6 и libstdc ++ 6.
Кто-нибудь сталкивался с чем-то подобным раньше? Я понятия не имею, почему мои строки не работают!
Спасибо
Sam
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 в своей основной функции, все работало нормально.