HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Очередной бред ХЛ со строками
alloc, precache, eatsomeshit
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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]

Сообщить модератору | IP: Записан
Сообщение: 138886

Старое сообщение 15-06-2014 19:24
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35012
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 138887

Старое сообщение 15-06-2014 19:59
-
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1086

Рейтинг



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

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

Сообщить модератору | IP: Записан
Сообщение: 138888

Старое сообщение 15-06-2014 20:37
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35012
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 138889

Старое сообщение 15-06-2014 20:43
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

FreeSlave это не то.

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

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

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

Сообщить модератору | IP: Записан
Сообщение: 138895

Старое сообщение 16-06-2014 08:21
- За что?
Ghoul [BB]
МРАЗЬ ОПАСНАЯ

Дата регистрации: Jan 2006
Проживает: ...и прожигает...
Сообщений: 2567

Рейтинг



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



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

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

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

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

Сообщить модератору | IP: Записан
Сообщение: 138899

Старое сообщение 16-06-2014 09:06
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1086

Рейтинг



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

Сообщить модератору | IP: Записан
Сообщение: 138949

Старое сообщение 17-06-2014 09:31
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35012
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 138950

Старое сообщение 17-06-2014 09:42
-
~ X ~
offline

Дата регистрации: Oct 2005
Проживает: Архангельск
Сообщений: 3619

Рейтинг



Награды
 
[1 награда]


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

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

Сообщить модератору | IP: Записан
Сообщение: 138960

Старое сообщение 18-06-2014 11:14
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35012
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


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

__________________

Сообщить модератору | IP: Записан
Сообщение: 138963

Старое сообщение 18-06-2014 12:54
-
Тема закрыта XaeroX 18-06-2014 в 12:55
Временная зона GMT. Текущее время 04:29. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Очередной бред ХЛ со строками
alloc, precache, eatsomeshit
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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