【发布时间】:2021-07-27 09:13:50
【问题描述】:
char* stringFunction(char *astrics){
char *string;
string = (char*)malloc(MAX);
string[0] = 0;
strcat(string,"Hello ");
strcat(string,astrics);
strcat(string,"\n");
return string;
//free(string);
}
int main(int argc, char* argv){
printf(stringFunction("Robert"));
printf(stringFunction("Robert Greene"));
return 0;
}
如果在 return 语句之后没有读取任何代码,那么我应该如何释放为指针分配的内存 - 字符串
【问题讨论】:
-
您不能释放该函数中的指针。不允许调用者使用它,使整个函数无用。由调用者在使用后释放它。
-
请不要将 data 作为格式化字符串传递给
printf。使用%s格式并提供数据字符串作为参数。如果要直接输出字符串,使用puts。 -
您需要将返回的指针保存在一个变量中,并在完成数据处理后将该变量传递给
free。 -
顺便说一句,您的大部分代码都可以通过对
snprintf:snprintf(string, MAX, "Hello %s\n", astrics)的一次调用来替换。snprintf调用也可用于计算所需的确切内存量(有关详细信息,请参阅 thisprintf(and family) reference。