Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Dimanchik 05.04.2010 07:01
Класс String и VString при создании не создают локальную копию переданной им строка, а просто получают указатель. Для корректной работы кода необходимо самостоятельно выделять область памяти для строки (GC_MALLOC_ATOMIC) и копировать содержимое (можно strcpy). ИНАЧЕ, при изминении содержимого переменной buffer меняется содержимое всех, созданных на основе buffer, строк типа String и, следовательно, VString, что собственно я и наблюдал.char buffer[1024]; static void _GetWorkSpace(Request& r, MethodParams& ) { ::GetWorkSpace(0,buffer); char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1); strcpy(result,buffer); r.write_no_lang(String(result)); } static void _GetPlanTitle(Request& r, MethodParams& ) { ::GetPlanTitle(0buffer); char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1); strcpy(result,buffer); r.write_no_lang(String(result)); }Если есть более простые конструкции, прошу в студию.