ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
506004 Топик полностью
fk0, легенда (10.04.2014 23:38, просмотров: 514) ответил amusin на Теперь понятно, что сделали. Но, по-моему, мартышкин труд, т.к. не защищает от собственно записи за границу блока, после которой краш может произойти почти сразу же.
А может и не произойти. Вообще-то в большинстве случаев память выделяемая через malloc() используется или под строки, или под структуры, и пишется большими кусками (sprintf, memcpy и т.п.) И затирание границы блока очень даже детектится (выделили меньше чем использовали -- типично). Лучше отловить 50% ошибок или 0%? Потом что делать с самим malloc. Он при операциях с кучей может никак не определять её повреждение и молча глючить, либо таки проверять, что управляющие структуры кучи содержат неадекватную информацию и что-то предпринимать. Благо накладные расходы копеечные, а вопрос что лучше по-моему даже не стоит (краш же может заключаться не в исключительной ситуации, а в различных глюках -- лучше что ли?) Это не гарантия, не панацея, не серебрянная пуля. Но способ локализовать хотя бы часть (значительную) ошибок. Вообще их лучше ловить valgrind'ом (и запись за границу блока, с разумным смещением, не гигабайты), но понятно, что все до конца никогда не удастся выловить.
[ZX]