4

我做了一个小函数来连接字符串并返回组合字符串。但是,由于我将内存分配给函数中的第三个变量,当函数完成时内存会被释放还是会保留在那里,需要我稍后释放它?如果我需要释放它,最时尚的解决方案是什么?

这是测试代码。它有效,但我无法判断我的工具是否释放了该内存。

#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;
}
4

5 回答 5

13

是的,你需要释放它。

大概是这样的:

int main(){
    char *s = StrCat("HELLO ", "WORLD");
    printf("String: %s\n", s);
    free(s);
    return 0;
}
于 2009-06-28T18:33:07.010 回答
5

由于应用程序在 printf 之后立即结束,因此实际上没有必要释放它,因为应用程序会在它死后为您执行此操作。但是,是的,释放它总是一个好习惯。

于 2009-06-28T18:44:51.890 回答
3

是的,你必须释放它。尝试 valgrind 来检测泄漏。

于 2009-06-28T18:35:15.540 回答
3

是的。如果您调用 calloc、malloc、new 等,还必须调用释放内存的函数。

于 2009-06-28T18:36:56.443 回答
2

内存泄漏和释放内存这是棘手的问题。可能值得尝试调试器?我使用 deleaker 来解决此类问题。

于 2011-11-26T09:19:37.683 回答