有人可以建议如何释放除main之外的函数内部分配的内存(例如:以下示例中的mymalloc())?在程序中从不同的函数调用是否有效?或者,既然我们在myalloc()中分配了内存,我们是否需要在myalloc()内部释放它? 请建议是否有更好的方法来实施以下内容。
int main(int argc, char ** argv) {
int * arr = {0};
foo();
return 1;
}
void mymalloc(int ** myarr1 ) {
(*myarr1) = (int*) malloc( sizeof(int)*25 );
(*myarr1)[3] = 69;
}
void myfree(int ** myarr2 ) {
if (*myarr2) {
memset(*myarr2, 0, sizeof(int)*25 );
free(*myarr2);
}
void foo() {
int * arr1 = {0};
mymalloc(&arr1);
printf("car[3]=%d\n",arr1[3]);
myfree (&arr1);
// Check if memory was freed
if (arr1) {
printf("ERROR: Memory allocated to arr1 is not freed.");
exit (1);
}
}
输出:
错误:未释放分配给arr1的内存。
答案 0 :(得分:2)
您可以free
在程序的任何位置使用malloc
创建的任何内容。
使用malloc
分配的内存来自内存的“堆”部分,除非与free
一起发布,否则将在程序的整个生命周期内保留。
答案 1 :(得分:1)
没有必要在同一个函数中调用malloc和free,但我对你的代码有一些评论:
答案 2 :(得分:0)
你的内存被正确释放,但是一个空闲的调用没有将指针设置为null,指针仍指向现在无效的地址。如果你在免费后尝试写一些东西到arr1,你会得到一个分段错误,即使arr1没有指向null。
这就是为什么你应该在释放它之后总是将指针设置为null