在局部函数中动态分配和释放内存

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() 来自该函数调用者的指针。

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