Обычно память объекта не перезаписывается, а какая-то часть памяти вне объекта. Если это затрагивает управляющие структуры malloc, free выйдет из строя, как только получит доступ к ним и попытается сделать странные вещи, основываясь на поврежденной структуре.
Если бы вы действительно перезаписывали объектную память только глупыми вещами, malloc / free не знал бы об этом. Ваша программа может зависнуть, но по другим причинам.
Взгляните на valgrind . Это инструмент, который эмулирует процессор и отслеживает каждый доступ к памяти на предмет аномалий (например, попытки перезаписать управляющие структуры malloc). Он действительно прост в использовании, в большинстве случаев вы просто запускаете свою программу в valgrind, добавляя valgrind
в оболочку, и это избавляет вас от боли.
Что касается C ++: всегда , убедитесь, что вы используете new в сочетании с delete и, соответственно, new [] в сочетании с delete []. Никогда не путайте их. Произойдут плохие вещи, часто похожие на то, что вы описываете (но valgrind предупредит вас).