Держись. Подумайте о замене:
char *tmp = (char*)malloc(sizeof(char) * strlen(data));
tmp = data;
return tmp;
с:
char *tmp;
tmp = (char*)malloc(sizeof(char) * strlen(data));
if (tmp == NULL) {Do some error handling because you are out of heap memory};
strcpy(tmp,data);
return tmp;
Чтобы ответить на ваш вопрос, каждый раз, когда вы успешно вызываете malloc (), вам будет предоставлен указатель, который указывает на вновь идентифицированный блок свободной памяти кучи.
способ написания вашего кода
char *wew = tesaja("budipergikepasar");
.
.
.
wew = tesaja("kepasarbudisedangpergi");
Юо "потеряет контроль" того, где tesaja ("budipergikepasar") находится в оперативной памяти кучи, когда wew перезаписывается вторым вызовом tesaja. После этого у вас возникнет «утечка памяти», поскольку у вас больше нет указателя на блок оперативной памяти, содержащий «budipergikepasar», и вы не сможете вызывать free () с местоположением «budipergikepasar». Подумайте об использовании своего кода следующим образом:
if (wew != NULL) {
free(wew);
}
wew = tesaja("budipergikepasar");
.
.
.
if (wew != NULL) {
free(wew);
}
wew = tesaja("kepasarbudisedangpergi");
Использование malloc () и free () таким образом поможет вам более эффективно использовать доступную оперативную память. Существуют и другие способы управления памятью, но я изложил это таким образом, чтобы подчеркнуть важность отслеживания того, что вы выделили с помощью malloc (), а затем освобождения этого пространства с помощью free (), когда вы будете готовы.
надеюсь, это поможет -
Perry