Когда вы пишете постоянную строку в C, например, "xxxxxx"
, происходит то, что эта строка попадает непосредственно в исполняемый файл.Когда вы ссылаетесь на него в вашем источнике, он заменяется указателем на эту память.Таким образом, вы можете прочитать строку
arr = "xxxxxxx";
, рассматривая arr
как число как что-то вроде:
arr = 12345678;
Где этот номер - адрес.malloc
вернул другой адрес, и вы выбросили его, когда назначали новый адрес для обр.Вы получаете segfault, потому что вы пытаетесь освободить постоянную строку, которая находится непосредственно в вашем исполняемом файле - вы никогда не выделяли ее.