ЗНАЧЕНИЕ "p":
Вы выделили достаточно места, чтобы вместить это: ""
[[строки заканчиваются нулем, помните?Вы не видите это, но оно там - так что это один использованный байт.]]
но вы пытаетесь сохранить это: "01234556789abcdefghijklmnopqrstuvwxyz"
в результате получается, что "материал", начинающийся с "123 ..", сохраняется вне памяти, которую вывыделено - возможно, писать поверх других "вещей" в другом месте.как таковые, ваши результаты будут грязными, и, как сказал «jidupont», вам повезло, что это не просто сбой.
ВЫВОД ПЕЧАТИ [СДЕЛАНО] «p»
как сказано,вы написали далеко за концом «р»;но Маллок этого не знает.поэтому, когда вы попросили другой блок памяти для «q», возможно, он дал вам память, следующую за тем, что он дал вам для «p»;и, возможно, он выровнял память (типично), чтобы его указатель был округлен до некоторого приятного числа;а затем, возможно, он использует часть этой памяти для хранения бухгалтерской информации, которая вас не касается.но ты не знаешь, не так ли?вы тоже не должны знать - вы просто не должны писать в память, которую вы сами не выделили!
и результат?Вы видите кое-что из того, что ожидали - но оно обрезано!потому что ... возможно, был выделен другой блок в используемой памяти (и я мог бы добавить без разрешения), или что-то еще принадлежало этому блоку и изменило его, и в любом случае некоторые значения были изменены - в результате: "01234556789abcdefghijklm!».опять же, повезло, что вещи не просто взорвались.
СВОБОДА "q"
если вы освободите "q", то попробуйте получить к нему доступ - как вы делаете, пытаясь распечатать его- вы (обычно) получите неприятную ошибку.это вполне заслуженно.Вы не должны раскомментировать это "free (q)".но вы также не должны пытаться напечатать «д», потому что вы еще ничего не положили!насколько вы знаете, он может содержать бред, и поэтому печать будет продолжаться до тех пор, пока он не встретит NULL - что может произойти не до конца света - или, что более вероятно, до тех пор, пока ваша программа не получит доступ к еще большему количеству памяти, чем должна.т, и вылетает, потому что ОС вас не устраивает.:)