Приведу аналогию, почему это «работает».
Предположим, вам нужно нарисовать рисунок, поэтому вы берете лист бумаги, кладете его на стол и начинаете рисовать.
К сожалению, бумага недостаточно велика, но вы, не заботясь или не замечая, просто продолжаете рисовать свой рисунок.
Когда закончите, вы делаете шаг назад и смотрите на свой рисунок, и он выглядит хорошо, именно так, как вы хотели, и именно так, как вы его нарисовали.
Пока кто-нибудь не подойдет и не возьмет свой листок бумаги, который они оставили на столе до того, как вы добрались до него.
Теперь отсутствует часть рисунка. Фрагмент, который вы нарисовали на бумаге другого человека.
Вдобавок у этого человека теперь есть кусочки вашего рисунка на бумаге, и он, вероятно, возится с тем, что хотел вместо этого на бумаге.
Таким образом, хотя может показаться, что использование памяти работает, это происходит только потому, что ваша программа завершается. Оставьте такую ошибку в программе, которая работает на некоторое время, и я могу гарантировать вам, что вы получите странные результаты, сбои и тому подобное.
C построен как бензопила на стероидах. Вы почти ничего не можете сделать. Это также означает, что вам нужно знать, что вы делаете, иначе вы пропилите дерево насквозь себе под ногу, прежде чем осознаете это.
person
Lasse V. Karlsen
schedule
06.08.2009