在本地函数中动态分配和释放内存

时间:2015-05-15 11:32:43

标签: c memory-leaks 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()内拨打free_or_not(),会导致内存泄漏吗?

2 个答案:

答案 0 :(得分:7)

  

如果我不在free()内拨打free_or_not(),会导致内存泄漏吗?

是的,它会导致内存泄漏。一旦你的函数完成执行,你就没有任何指针到分配的内存到free()

解决方案:如果您将函数的返回类型更改为void *(或类似)并从函数返回已分配的指针(ip),那么,您可以收集调用者的指针和free()来自此函数调用者的指针。

答案 1 :(得分:3)

是的,当你的函数完成时,你将失去指向已分配内存的指针以释放()它。