Я следующий блок кода:-ошибка символов чтение строки
for(CarsPool::CarRecord &record : recs->GetRecords())
{
LVITEM item;
item.mask = LVIF_TEXT;
item.cchTextMax = 6;
item.iSubItem = 0;
item.pszText = (LPSTR)(record.getCarName().c_str()); //breakpoint on this line.
item.iItem = 0;
ListView_InsertItem(CarsListView, &item);
item.iSubItem = 1;
item.pszText = TEXT("Available");
ListView_SetItem(CarsListView, &item);
item.iSubItem = 2;
item.pszText = (LPSTR)CarsPool::EncodeCarType(record.getCarType());
ListView_SetItem(CarsListView, &item);
}
Информация из Visual Studio Debugger здесь:
Почему не программа способна читать символы из строки?
тест показал мне, что он работает таким образом:
MessageBox(hWnd, (LPSTR)(record.getCarName().c_str()), "Test", MB_OK);
Возвращает ли 'getCarName' копию? В этом случае временное возвращение уничтожается в конце выражения, оставляя указатель, возвращенный 'c_str()' dangling. См. [здесь] (http://stackoverflow.com/questions/4214153/lifetime-of-temporaries) – user786653
Отладчик не может прочитать информацию, потому что вы все еще находитесь в точке ** до ** присвоения. '0xcccccccc' - значение, которое CRT Microsoft заполняет выделенной памятью. Если вы видите эту последовательность, у вас есть неинициализированная память. – IInspectable
Мне нужна эта точка останова, потому что вывод «выглядит пустым» в моем списке. – Victor