我创建了一个返回指针的指针函数。我在函数中放置了一个
malloc
,但我不知道是否要放置free()
,如果是,它是必须放入函数中还是放入main
中。
当你不需要时,你可以释放分配的内存
#include <stdio.h>
#include <stdlib.h>
int *fun()
{
int *ptr=malloc(sizeof(int));
if(ptr==NULL)
{
printf("Error");
exit(1);
}
return ptr;
}
int main()
{
int*ptr=fun();
/*do something*/
/*After all work of ptr is done*/
free(ptr);
/*do something*/
}
当您确信已完成使用分配的指针时,通常会调用free。指示返回值是否应该是free'd也是一种很好的做法。下面是一个在C:中组织方法的例子
int main() {
//let's start our method with initializing any declarations
int mystringlen = 25;
char* mystring1 = NULL;
char* mystring2 = NULL;
//let's now assign some data
mystring1 = malloc(mystringlen * sizeof(char));
if (mystring1 == NULL) goto end; //malloc failure :(
strncpy(mystring1, "Hello world", mystringlen);
//strdup(3) mallocs its return value, we should be careful and check
//documentation for such occurances
mystring2 = strdup("hello world");
if (mystring2 == NULL) goto end; //malloc failure
//let's do our processing next
printf("%sn%sn", mystring1, mystring2);
//let's do our cleanup now
end:
if (mystring1) free(mystring1);
if (mystring2) free(mystring2);
return 0;
}
有一些可用的约定,有些可能会反对使用goto进行流控制。请注意,我们将指针设置为NULL
,以便以后可以进行安全清理。我们也在检查malloc故障,这是一个很好的做法。