这会泄漏内存吗?

时间:2009-06-28 18:30:11

标签: c string malloc

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

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

#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 个答案:

答案 0 :(得分:13)

是的,你需要释放它。

可能类似于:

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

是。如果你调用calloc,malloc,new等,也必须调用一个释放内存的函数。

答案 4 :(得分:2)

内存泄漏和空闲内存这是一个棘手的问题。可能值得尝试调试器?我使用deleaker来解决这些问题。