~ X ~
А чуть-чуть подумать?
Если звук ещё не закеширован, PRECACHE_SOUND записывает имя звука в глобальный массив sound_precache, который потом отсылается на клиент во время сигнона. И халфа запоминает именно указатель, а не копирует строку. Ты передаёшь адрес локальной переменной, и ессно, он становится инвалидным после завершения функции.
Конечно, это неправильно - вот так слепо доверять авторам модов и не копировать память. Но это и не идиотизм, с другой стороны. Это тяжкое наследие QC, где все строки маллокались в дата-секции и были статичными. Собсно, код функции PF_precache_sound в ку1 как бы намекает.
Спасибо, вобщем, я так и подумал. Всегда считал что прекеш копирует символы в свой массив строк, большой и надёжный, а в итоге... так делает только ALLOC_STRING().
FreeSlave это не то.
Вот так: три месяца не програмил - и всё. Снова начал мыслить по-человечкски.
~ X ~ писал: Вот так: три месяца не програмил - и всё. Снова начал мыслить по-человечкски.
Зарекалась свинья говна не есть...
Таки сорвался, браток, сорвался...
__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.
Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo
~ X ~, не копирует, ибо большинство строк, используемых для прекэша - строковые литералы, существующие всё время работы программы. Их и не надо копировать. Вообще Дядя Миша же писал в своё время статью о том, как со строками работать в HL. Ты даже её читал, судя по комментам.