考虑以下功能:
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()
内拨打free_or_not()
,会导致内存泄漏吗?
答案 0 :(得分:7)
如果我不在
free()
内拨打free_or_not()
,会导致内存泄漏吗?
是的,它会导致内存泄漏。一旦你的函数完成执行,你就没有任何指针到分配的内存到free()
。
解决方案:如果您将函数的返回类型更改为void *
(或类似)并从函数返回已分配的指针(ip
),那么,您可以收集调用者的指针和free()
来自此函数调用者的指针。
答案 1 :(得分:3)
是的,当你的函数完成时,你将失去指向已分配内存的指针以释放()它。