在C编程和使用malloc时,返回指针的指针函数中的free()在哪里


我创建了一个返回指针的指针函数。我在函数中放置了一个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故障,这是一个很好的做法。

相关内容

  • 没有找到相关文章

最新更新