HLFX.Ru Forum
Показать все 10 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Очередной бред ХЛ со строками (https://hlfx.ru/forum/showthread.php?threadid=4438)


Отправлено ~ X ~ 15-06-2014 в 19:24:

Angry Очередной бред ХЛ со строками

C++ Source Code:
1
char szSound[64];// temporary, overwritable, ALLOC_STRING copies (and spoils) it, \0 is mandatory
2
sprintf(szSound, "fans/fan%d.wav\0", m_sounds);
3
pev->noiseRunning = ALLOC_STRING(szSound);
4
// нормально, просто офигенно:
5
PRECACHE_SOUND(STRINGV(pev->noiseRunning));
6
 
7
// а если от так - недозагрузка, "server failed to transmit 'sounds/'"
8
PRECACHE_SOUND(szSound);


ЧТО ЗА БРЕД?!! Почему??
Детектор идиотизма плавится!!

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 15-06-2014 в 19:59:

~ X ~
А чуть-чуть подумать?
Если звук ещё не закеширован, PRECACHE_SOUND записывает имя звука в глобальный массив sound_precache, который потом отсылается на клиент во время сигнона. И халфа запоминает именно указатель, а не копирует строку. Ты передаёшь адрес локальной переменной, и ессно, он становится инвалидным после завершения функции.
Конечно, это неправильно - вот так слепо доверять авторам модов и не копировать память. Но это и не идиотизм, с другой стороны. Это тяжкое наследие QC, где все строки маллокались в дата-секции и были статичными. Собсно, код функции PF_precache_sound в ку1 как бы намекает.

__________________

xaerox on Vivino


Отправлено FreeSlave 15-06-2014 в 20:37:

Странно, что оно вообще так не падает. Там по этому указателю что угодно может быть после уничтожения локального массива.

И кстати то, что ты там \0 в конец форматной строки добавил - никак не спасёт при переполнении и вообще не несёт смысла.


Отправлено XaeroX 15-06-2014 в 20:43:

Угу, особенно если учесть, что ALLOC_STRING вообще никак исходную строку не модифицирует.

__________________

xaerox on Vivino


Отправлено ~ X ~ 16-06-2014 в 08:21:

Спасибо, вобщем, я так и подумал. Всегда считал что прекеш копирует символы в свой массив строк, большой и надёжный, а в итоге... так делает только ALLOC_STRING().

FreeSlave это не то.

Вот так: три месяца не програмил - и всё. Снова начал мыслить по-человечкски.

Цитата:
Ненавижу, б@#$%^, цыган

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено Ghoul [BB] 16-06-2014 в 09:06:

Цитата:
~ X ~ писал:
Вот так: три месяца не програмил - и всё. Снова начал мыслить по-человечкски.



Зарекалась свинья говна не есть...

Таки сорвался, браток, сорвался...

__________________
Ты топчешь мир своими ботинками,
Не замечая куда наступаешь,
А время от тебя уходит цветными картинками,
Но ты даже этого не понимаешь.

Компрометирую данные своей учётной записи.
ЛОГИН: Ghoul [BB]
ПАРОЛЬ: paladin_solo


Отправлено FreeSlave 17-06-2014 в 09:31:

~ X ~, не копирует, ибо большинство строк, используемых для прекэша - строковые литералы, существующие всё время работы программы. Их и не надо копировать. Вообще Дядя Миша же писал в своё время статью о том, как со строками работать в HL. Ты даже её читал, судя по комментам.


Отправлено XaeroX 17-06-2014 в 09:42:

FreeSlave
Комментировать - не значит читать.
Знаешь, сколько нынче мимокунов развелось?

__________________

xaerox on Vivino


Отправлено ~ X ~ 18-06-2014 в 11:14:

Читать - не значит помнить.
Ну фсё, значит, тему можно удалять за ненадобностью.

__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]


Отправлено XaeroX 18-06-2014 в 12:54:

Удалять, чтобы через год ты забыл и кто-нибудь новую создал?
Не, пусть будет.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 06:46.
Показать все 10 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024