Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с std::string

5.2K
04 декабря 2004 года
tasmanian_devil
6 / / 06.01.2004
Привет всем!

Есть такая проблема:

При попытке записи строки в экземпляр строки std::string происходит выброс исключения. Совместно ипользую ATL и STL. Запись производится обычным оператором присваивания или автоматическим созданием строки при передаче ее в качестве параметра.

Отладчик показал, что исключительная ситуация возникает при попытке выделения памяти, при чем в некоторых случаеях не только стандартных строк. В чем может быть дело? Памяти свободной достаточно, проект "вдруг" перестал работать.
10
04 декабря 2004 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by tasmanian_devil
Отладчик показал, что исключительная ситуация возникает при попытке выделения памяти, при чем в некоторых случаеях не только стандартных строк. В чем может быть дело? Памяти свободной достаточно, проект "вдруг" перестал работать.


А ты уверен, что записываешь байты по адресу буфера строки, а не ее адреса?

Вообще, приведи пример неработающего кода.

5.2K
04 декабря 2004 года
tasmanian_devil
6 / / 06.01.2004
Цитата:
Originally posted by smartsoft

А ты уверен, что записываешь байты по адресу буфера строки, а не ее адреса?

Вообще, приведи пример неработающего кода.



Уверен, поскольку непосредственно с адресом строки работает библиотека stl. Я простледил ее вызовы в операторе присваивания и нашел точку ошибки - выделение памяти.

Пример:
CString b = "blah-blah-blah";
std::string a = b;

3
04 декабря 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by tasmanian_devil

Пример:
CString b = "blah-blah-blah";
std::string a = b;



Извини, но пример несколько странный.
Зачем использовать и CString и std::string одновременно? Используй что-то одно.
Кроме того могут возникнуть проблемы при переходе на Unicode, т.к. CString автоматом станет CStringW, а std::string так и останется мультибайтовым. Кстати, как ты сейчас компилируешь?

А с примером можно попробовать разобраться так:

CString b = "blah-blah-blah";
std::string a = static_cast<LPCTSTR>(b);

5.2K
05 декабря 2004 года
tasmanian_devil
6 / / 06.01.2004
Цитата:


Извини, но пример несколько странный.
Зачем использовать и CString и std::string одновременно?



Возможно, уже переписал полностью с объектами ATL. Все равно не работает, та же ошибка - E_OUTOFMEMORY, только теперь при добавлении элемента в массив. А памяти еще более чем достаточно. В чем может быть дело?

3
05 декабря 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by tasmanian_devil


Возможно, уже переписал полностью с объектами ATL. Все равно не работает, та же ошибка - E_OUTOFMEMORY, только теперь при добавлении элемента в массив. А памяти еще более чем достаточно. В чем может быть дело?



Надо смотреть код, так сказать сложно.
Возможно, наведенная ошибка.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог