1、这样没有问题,不会造成内存泄露
创新互联是一家专业提供扎鲁特旗企业网站建设,专注与做网站、网站设计、HTML5、小程序制作等业务。10年已为扎鲁特旗众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。
2、当你不再使用这个buffer变量的时候就 free(buffer),buffer地址指向的空间就被释放掉了
在你的主函数中 这样使用
A *buffer=function();
//这里使用buffer
free(buffer); //施放内存
//有这一句就不会内存泄露了
内存泄露是对内存失去了控制,造成了内存的浪费,所以你要控制住你分配的内存
内存泄露典型例子是这样子的
A *buffer=function(); //buffer指向一段内存
buffer=function(); //buffer指向一段新内存,原来的内存没有释放,而且已经失去了对它的控制
用malloc在堆上分配内存必须有显式的free来释放,释放之后返回的指针一定是个迷失指针,所以在函数内释放是不可能的。
像这样需要一块缓冲区的情况是经常有的,我本人采用的变通方式大概有两种:
1、函数参数中直接传入一块足够大的缓冲区指针,用完由调用方自己释放。微软的API函数就经常采用这种方式,经常需要我们传入一个缓冲区指针。这种方式好处是并不一定要在堆上分配内存,可以传入像数组名等其它缓冲区指针,更灵活。
2、另一种方式采用入口函数和析构函数分开,像fopen你可能用过,它为什么最后还必须用fclose关闭?实际上就是它内部申请了堆上内存,必须释放。你也可以将你的函数类似的方式分成两部分。好处是函数的移植性更强。
不过针对你的这种函数,需要的内存实际上微乎其微,完全可以用数组的方式分配一个足够大的缓冲区代替堆分配,你这种分配本身是更浪费资源的,得不偿失。
不懂得还可以问我。
这就要看你的资源是new出来的还是 malloc分配的。
如果是new 出来的内存资源的话,那么就用delete释放,
如果是malloc分配出来的内存资源的话,那么就用free()释放。
例如:
char* c = new char[20]; //new 一个char类型内存的数组
char *ptr =(char*)malloc(sizeof(char)*20); //malloc分配20个char类型的内存
delete c; //释放c的内存
free(ptr); //释放ptr的内存
malloc()函数开辟的内存空间系统是不会自动释放的,与普通定义的数据变量不一样,所以得在程序里,手动写free()函数释放内存空间,
如果不写free函数释放malloc()函数开辟的内存空间的话,系统中无效的内存空间会越积越多,到达一定数量后内存就不够用了,这就是所说的内存溢出。
如果是你 手动申请的,那么才需要自己释放,用free(变量名)释放
如果是你没有手动申请,那么它会自动回收