Re: BCB5: проблема со строчками...
От: Hunta Украина http://dr-leafsey.livejournal.com
Дата: 08.01.04 03:16
Оценка:
Здравствуйте, h256, Вы писали:

H>столкнулся со странной проблемой, никак не пойму в чем дело...

H>есть такая вот функция:

H>
H>char* Prohod::GetSelectString()
H>{
H>  if(id == 0)
H>    return "select * from prohod";
H>  AnsiString sql = "select * from prohod where id="+IntToStr(id);
H>  return sql.c_str();
H>};
H>


Это Вам еще повезло, что возвращается что-то толковое.
В строке
AnsiString sql = "select * from prohod where id="+IntToStr(id)

в СТЕКЕ создается объект AnsiString sql. Но это как раз не столь важно.
Важно то, что при вызове
return sql.c_str()

также в СТЕКЕ создается временная переменная — массив char, указатель на который и вернет Ваша функция. А так как содержимое стека при выходе из функции фактически теряется, никто не может поручиться за результат ее работы.

А почему бы Вам не переписать обьявление функции и не возвращать сразу AnsiString?

... Вы часом не с java перескочили? Я за собой часто таких тараканов замечаю — это все сборка мусора развращает!
Поступай так, чтобы максима своей воли в любое время могла стать принципом всеобщего законодательства.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.