Критика это когда тебе конкретно говорят, с чем есть проблемы и что желательно поправить. А вот когда тебе говорят, что у тебя по умолчанию всё говно и лучше вообще брось это дело и никогда не берись - это не критика (это я о своём печальном опыте).
ЦитатаEchoIT ()
понимаешь, он просто вроде бы взрослый человек, который и вести себя, в силу своего возраста, должен адекватно. Зачем так остро реагировать на всяких школьников (условно) с форума?
использование всяческих ООП-механизмов не думаю, что хорошо для Си
Без них разработка игр превращается в целую эпопею. Хотя и с ними не всё так гладко )
ЦитатаOtinagi ()
Ещё и с NULL надо быть внимательным. В некоторых стандартах для систем с повышенной отказоустойчывастью советуют после освобождения памяти или создании указателя ручками ещё указателю NULL присваивать, иначе проверка на NULL может потом не сработать.
Делаю это всегда. Без этого в моем проекте никак...
ЦитатаOtinagi ()
у MISRA-C много заметок по динамической работе с памятью
За наводку плюсик однозначно.
Добавлено (17 июля 2017, 10:29) ---------------------------------------------
ЦитатаOtinagi ()
У меня было нечто вроде списка задач, и это было сделано как массив структур
Думаю, что для списка надо было реализовать список, а не массив использовать. Это бы решило ряд проблем.
EchoIT, пообщался я с ним "вживую" в ТС и на удивление это оказался вполне себе обычный человек, наивный в чем-то, но всё же человек, а не тролль. Сам он здешних троллями считает. Но это вполне очевидно. HerrPotapov, это скорее похоже на то, что вы нашли "мальчика для битья". Я как-то попадал в подобную ситуацию. Написал на другом форуме с криками о помощи, а в ответ мне толпой начали писать всякие каки, что типа проект ГМО и сам я ГМО. Ясен-красен в защиту я поогрызался, а в ответку полетели минусы. Я тут же ретировался, т.к. кому-то что-то доказывать это дохлый номер. Sandar, кстати, подумай над этим. Я не в чью-то защиту сейчас пишу. Просто наблюдаю картинку, свойственную для рунета, когда кого-то затюкать это в порядке вещей. Sandar, а ещё я, если честно, в успех вашего проекта не верю, но поживем-увидим. Просто я натыкался на другого персонажа-организатора, который вдохновившись историями успешных стартапов решил, что сможет также. Влил неплохую сумму в очередного убийцу Сталкера (гораздо больше, чем ты намерен выделить), а выхлоп нулевой. Потом, когда деньги кончились, он решил набирать энтузиастов. Как итог - текучке кадров можно только позавидовать, а прогресс стремится к нулю. Хотят найти инвестора, но кто будет инвестировать проект, который тянется уже 8 лет, кажется, а даже демки полноценной до сих пор нет! Его тема где-то здесь на форуме тоже болтается.
а ещё ты мне так и не скинул описание к своим картинкам на почту
Сообщение отредактировал Vuvk - Понедельник, 17 Июля 2017, 07:01
указатели на виртуальные функции и которые да, действительно, мемсетом обнулять немножко глупо.
С этим все ясно. Есть ли какие-то ситуации, когда не глупо - вот в чем вопрос. Просто разобраться хочу.
Добавлено (16 июля 2017, 08:56) --------------------------------------------- Похоже в итоге натолкнулся на "неглупую" ситуацию, когда, по-видимому, не обойтись хотя бы без частичного затирания. Опишу вкратце. Я пишу на Си, но всячески имитирую ООП-механизмы. Для определения к какому "классу" относится созданный объект (на основе структур) в них зашит в заголовок идентификатор (у каждого свой). Например, текстура:
bool ObjectIsTexture(void* object) { if (object == NULL) return false;
if (*((uint32*)object) == TXR_IDENT) return true;
return false; }
Есть различные структуры, содержащие указатели на текстуру для использования. В случае, если текстура удалена, её нельзя использовать, как ресурс. Для этого производится такая проверка в момент обращения к ней:
Код
if (texture != NULL) { if (ObjectIsTexture (texture)) { /* использовать */ } else texture = NULL; }
Но если её не затереть (хотя бы идентификатор), то при обращении по адресу в мусоре может остаться верный идентификатор и всё, пиши пропало. Такие соображения. Если у кого есть что конструктивного заметить, я только за.
Сообщение отредактировал Vuvk - Воскресенье, 16 Июля 2017, 09:06
Всем привет! Вопрос у меня не только по С/С++, но и вообще. Однако т.к. я задумался над этим, когда писал код на Си, то и разместил его здесь. Вопрос ламерский ) Итак, суть: есть любая структура с несколькими полями -
Код
typedef struct { float x, y, z; int anything; } example_s;
В каком-то участке программы я её динамически создал:
Код
example_s* example = (example_s*)calloc(1, sizeof(example_s));
/* что-то с ней сделал и решил удалить */
memset(example, 0, sizeof(example_s)); /* вопрос */ free(example); example = NULL;
Вопрос следующий - есть ли какой-то смысл затирать (выставлять нули) все поля перед удалением структуры? Улучшает ли это в последующем какие-то процессы выделения памяти или в данном случае это не имеет значения? Читал, что для безопасности можно затирать пароли, логины, но вот в противовес так же читал, что компилятор с флагами оптимизации вырезает memset за ненадобностью, т.к. это бесполезно в данной ситуации. Но меня интересует не скрытие от злоумышленников каких-то данных, а в принципе как оно по фэн-шую.
Спасибо за внимание.
Сообщение отредактировал Vuvk - Вторник, 18 Июля 2017, 09:22
Суть проблемы вот в чем: размер файла диска уже более 11гиг. Хотя я почистил все внутри эмулятора.
То, что ты там внутри почистил, ничего не меняет. Размер диска увеличивается автоматически по требованию, но автоматически не уменьшается. Sad, but true. Во всяком случае, если это точно VBox.
гугл выдал мне две версии уменьшения диска vmdk в VmWare и в VirtualBox: Раз Два
Grisha56, какой-то ну очень кривой способ создать трупик вместо персонажа. По идее нужно, чтобы и трупик, и игрок был одним и тем же объектом. Когда игрок "умирает", отключить скрипты управления, включить физику на всех частях тела и включить, если есть, скрипты трупика. puksus верно подметил. Если же использовать трупик, как отдельный префаб всё-таки, то создание трупа умещается в двух строках кода:
Код
public GameObject player; public GameObject deadPlayer;
if (Input.GetKeyDown(KeyCode.X)) { if (player) { // создать дохлого игрока в месте игрока и с поворотом игрока if (deadPlayer) Instantiate (deadPlayer, player.transform.position, player.transform.rotation); // удалить игрока Destroy(player); } }
Сообщение отредактировал Vuvk - Пятница, 14 Июля 2017, 07:47