Здравствуйте, 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 перескочили? Я за собой часто таких тараканов замечаю — это все сборка мусора развращает!
Поступай так, чтобы максима своей воли в любое время могла стать принципом всеобщего законодательства.