我创建了一个小函数来连接字符串并返回组合字符串。但是,由于我将内存分配给函数中的第三个变量,当函数完成时是否会释放内存,或者它会留在那里,要求我以后释放它?如果我需要释放它,那么最时尚的解决方案是什么?
这是测试代码。它有效,但我无法判断是否使用我的工具释放了内存。
#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;
}
答案 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来解决这些问题。