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 语句之后没有读取代码,那么我应该如何释放为指针分配的内存 - 字符串
答案 0 :(得分:2)
当您返回分配的内存块时,您将所有权转移给调用者。这意味着调用者有责任在完成使用后释放内存块。或者,它可以反过来将所有权转移给它自己的调用者(等等......)
答案 1 :(得分:1)
您的程序在使用完内存之前不应释放内存。在 return
语句中,您的程序还没有完成使用该内存,因为 main
函数仍然想要打印它!如果您释放 stringFunction
内的内存,则 main
将打印释放的内存。
不要犯认为必须释放指针的常见错误。您不必释放指针。你只需要释放内存。
在这种情况下,main
必须在完成使用后释放内存并且不再需要它。这意味着我们不能只写 printf(stringFunction(
,因为我们需要将指针放在变量中。
int main(int argc, char* argv){
char *mystring = stringFunction("Robert");
printf(mystring);
free(mystring);
mystring = stringFunction("Robert Greene");
printf(mystring);
free(mystring);
return 0;
}
额外注意:你应该养成写 printf(mystring);
的习惯,而不是 printf("%s", mystring);
。否则,如果您将“Robert Greene”更改为“Robert %s”,您的程序可能会崩溃。但是如果你使用 printf("%s", mystring);
它只会打印“Hello Robert %s”