Я преподавал на лекциях, что вызов free()
на указателе дважды действительно, очень плохо. Я знаю, что это хорошая практика, установить указатель на NULL
, сразу после его освобождения.Звонок бесплатный по указателю дважды
Однако я до сих пор не слышал никаких объяснений относительно того, почему это так. Из того, что я понимаю, работает malloc()
, он должен технически отслеживать указатели, которые он выделил, и дал вам возможность использовать. Так почему же он не знает, был ли освобожден указатель, который он получает через free()
, или нет?
Я хотел бы понять, что происходит внутри, когда вы вызываете free()
в том месте, которое ранее было освобождено.
указатель там, где вы anotate в Direccion данных, но то, что вы на самом деле бесплатно сами данные – Netwave
@DanielSanchez Да, но так как таНос подбрасывает вам, что указатель не должен освободить память/распределения построить еще обратите внимание, что он освободил место, на которое указывает указатель раньше? – Joe
Если вы не используете указатель после того, как вы 'free', это бесполезно при установке его в' NULL'. И * если * вы используете указатель после того, как вы 'free', у вас есть * неопределенное поведение *, независимо от того, задаете ли вы его значение« NULL »или нет. Конечно, если вы * проверяете * на 'NULL', то это помогает, но необходимость установить указатель на' NULL' - это не то, что вы абсолютно должны делать, делайте это в индивидуальном порядке в зависимости от того, как вы используете указатель. –