Будет ли эта утечка памяти? - PullRequest
4 голосов
/ 28 июня 2009

Я сделал небольшую функцию для объединения строк и возврата объединенной строки. Однако, поскольку я назначаю память третьей переменной в функции, будет ли освобождена память после завершения функции или она останется там, что потребует от меня ее освобождения позже? и если мне нужно освободить его, какое самое стильное решение для этого?

Вот тестовый код. Это работает, но я не могу сказать, освобождена ли эта память моими инструментами.

#include <stdio.h>
#include <math.h>
#include <string.h>

char * StrCat(const char *st1, const char *st2){
    char *string = calloc((strlen(st1) + strlen(st2) + 1), sizeof(char));
    strcat(string, st1);
    strcat(string, st2);
    return string;
}

int main(){
    printf("String: %s\n", StrCat("HELLO ", "WORLD"));
    return 0;
}

Ответы [ 5 ]

13 голосов
/ 28 июня 2009

Да, вам нужно освободить его.

Возможно что-то вроде:

int main(){
    char *s = StrCat("HELLO ", "WORLD");
    printf("String: %s\n", s);
    free(s);
    return 0;
}
5 голосов
/ 28 июня 2009

Поскольку приложения заканчиваются сразу после printf, на самом деле нет необходимости освобождать их, так как приложение сделает это за вас, когда оно умрет. Но да, всегда полезно освобождать его.

3 голосов
/ 28 июня 2009

Да. Если вы вызываете calloc, malloc, new и т. Д., Также должен быть выполнен вызов функции, которая освобождает память.

3 голосов
/ 28 июня 2009

Да, вы должны освободить его. Попробуйте valgrind, чтобы обнаружить утечку.

2 голосов
/ 26 ноября 2011

утечек памяти и свободной памяти - это каверзные проблемы. может стоит попробовать отладчик? Я использую делейкер для решения таких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...