Функция strcpy (myValue, inValue) копирует содержимое строки inValue, к которой добавляется символ завершения строки с завершающим символом '\ 0', в блок памяти, выделенный функцией malloc.
Как только strlen (inValue) возвращает длину строки, исключая контрольный символ '\ 0', область, выделяемая функцией malloc (strlen (inValue) * sizeof (char)), становится недостаточно большой для получения strcpy (myValue, inValue).
Таким образом, символ '\ 0' копируется в недопустимую область памяти, перезаписывая данные другой программы, и может вызвать ошибку сегмента, BAD ACCESS, GPF или что-то еще, например, отсутствие сообщения об ошибке и отображение непредсказуемых результатов, в зависимости от на компиляторе / операционной системе / платформе.
В вашем случае вы получили правильный результат сразу после выполнения strcpy, но чуть позже строка, казалось, была повреждена, потому что '\ 0' было скопировано в область памяти, которая не принадлежит блок выделен для myValue, и владелец этого блока может просто изменить его, и ваша строка потеряет свой конечный суффикс. Таким образом, при попытке снова напечатать myValue после этого может появиться программная ошибка или просто мусор.
Чтобы исправить ваш код, необходимо увеличить площадь, как показано на рисунке ниже.
Еще одна вещь ... в вашем примере вы написали strcpy (mValue, inValue) вместо strcpy (myValue, inValue), но я думаю, что вы написали опечатку при написании поста.
myValue = (char*)malloc((strlen(inValue) + 1) * sizeof(char));
strcpy(myValue, inValue);