在局部函数中动态分配和释放内存
Dynamically allocate and free memory in local functions
考虑以下函数:
void free_or_not ( int count ) {
int i ;
int *ip = malloc ( count * sizeof ( int ) ) ;
for ( i = 0 ; i < count ; i ++ )
ip[i] = i ;
for ( i = 0 ; i < count ; i ++ )
printf ( "%d\n" , ip[i] ) ;
free ( ip ) ;
}
如果不在free_or_not()
中调用free()
会不会导致内存泄漏?
Will this cause memory leak if I don't call free()
inside free_or_not()
?
是的,会造成内存泄漏。一旦您的函数完成执行,您就没有任何 指针 指向分配给 free()
它的内存。
解决方案: 如果将函数的 return 类型更改为 void *
(或类似)并且 return 分配的指针( ip
) 从函数中,然后,您可以收集调用者的指针和 free()
来自该函数调用者的指针。
是的,当你的函数完成时,你将失去指向已分配内存的指针以释放它。
考虑以下函数:
void free_or_not ( int count ) {
int i ;
int *ip = malloc ( count * sizeof ( int ) ) ;
for ( i = 0 ; i < count ; i ++ )
ip[i] = i ;
for ( i = 0 ; i < count ; i ++ )
printf ( "%d\n" , ip[i] ) ;
free ( ip ) ;
}
如果不在free_or_not()
中调用free()
会不会导致内存泄漏?
Will this cause memory leak if I don't call
free()
insidefree_or_not()
?
是的,会造成内存泄漏。一旦您的函数完成执行,您就没有任何 指针 指向分配给 free()
它的内存。
解决方案: 如果将函数的 return 类型更改为 void *
(或类似)并且 return 分配的指针( ip
) 从函数中,然后,您可以收集调用者的指针和 free()
来自该函数调用者的指针。
是的,当你的函数完成时,你将失去指向已分配内存的指针以释放它。