2014-11-13 3 views
-1
char* StringCopy(const char* string) { 
    char* newString; 
    int len; 
    len = strlen(string) ; 
    newString = malloc(sizeof(char)*len); 

    strcpy(newString, string); 
    return(newString); 
} 

Выше кода работает, даже если newString является локальным и должен быть освобожден в конце функции. Я новичок в C, любая ссылка, которая объясняет это или объяснение, будет очень полезна. Я имею в виду, не должны ли мы получить такую ​​ошибку: адрес памяти стека, связанный с локальным , переменная 'newString' вернулась?C Программирование: строковое копирование с использованием кучи

+2

Что вы хотите сказать? – SSC

+0

Вы должны управлять своей собственной кучевой памятью в C. Таким образом, если вы выделяете некоторую память в функции и не выделяете ее, она остается выделенной до тех пор, пока ваш процесс не завершится (или вы не выделите его в другом месте). – jzila

ответ

0

newString - это локальная переменная в рамках функции StringCopy. Ему присваивается указатель, который указывает на память malloc'ed.

Когда мы вернемся из этой функции, переменная newString будет освобождена. Однако выделенная область памяти (в которой указывает указатель newString). Вызыватель этой функции все равно сможет получить доступ к области памяти через возвращаемый указатель.

Примечание: вы должны проверить возвращаемое значение malloc, поскольку оно может вернуть NULL.

0

Значение newString - это адрес строки в куче.

Выше кода возвратите значение newString.

Строка на куче не будет уничтожена до тех пор, пока вы не освободите ее (или не выполните процесс)().

0

Вы также перезаписываете память malloc'ed одним байтом ... Не забывайте, что нулевой символ char принимает один; вам нужно добавить один к len

Смежные вопросы