![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| exelim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.8.2013 Репутация: нет Всего: нет |
Добрый день, имеется такая функция
Код:
метод getString( std::string const & _str ) возвращает const char * . Супервайзер говорит, что тут будут проблемы с памятью ( собственно на этой функции падает приложение). Что не так и что надо исправить? помогите пожалуйста. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
exelim, функция возвращает указатель. А ты пытаешься возвратить временный объект (c_str() создает C-строку, из которой конструктор QString создает временный объект QString). Для решения проблемы возвращай не ссылку, а объект QString. Или перепиши m_resources->getString таким образом, чтобы она возвращала константную ссылку на QString.
|
|||
|
||||
| exelim |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 5.8.2013 Репутация: нет Всего: нет |
переписать функцию getString нет возможности, работать надо только с этой функцией. А что если создать объект типа QString а потом вернуть его ?
QString const & BasicBlockReporter::getResource( std::string const & _resourcePath ) const { QString temp = m_resources->getString( _resourcePath ).c_str(); return temp; } так получится ? а насчет того, чтобы возвращать не ссылку,а объект - тоже не вариант, надо именно ссылка. Это сообщение отредактировал(а) exelim - 5.8.2013, 21:32 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Так тоже не получится. Хотя компилятор может не заметить ошибку, tmp создаётся на стеке и будет уничтожена при возврате из функции.
Нужно возвращать QString - этот класс спректирован с учётом того, что часто приходится возвращать QString. Или сделать tmp полем класса - но тогда tmp будет удалена только при удалениии объекта BasicBlockReporter. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |