Я считаю, что проблема в том, что вы написали
(char*)malloc(strlen(src+1));
Обратите внимание, что при вызове strlen
вы написали
strlen(src + 1)
вместо
strlen(src) + 1
В этой первой строке указано «длина строки, начинающейся на один символ после src
», то есть длина строки минус один (или общая сумма мусора, если строка пуста) Второй - тот, который вам нужен - длина строки плюс один для нулевого терминатора. Если вы используете первую версию, то в строке
strcpy(dst,src);
Вы закончите писать за концом буфера, что приведет к страшному неопределенному поведению. В вашем случае это проявлялось в ошибке повреждения кучи, когда вы пытались освободить блок, что имеет смысл, потому что вы действительно повредили кучу!
Попробуйте убрать +1 из скобок и посмотрите, все ли исправлено.
В качестве альтернативы, большинство компиляторов поставляются с нестандартной функцией под названием strdup
, которая делает именно то, что пытается сделать указанная выше функция. Возможно, вы захотите использовать это вместо этого.
Надеюсь, это поможет!