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

ash*_*ntu 4 c free memory-leaks

考虑以下功能:

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 ) ;
}
Run Code Online (Sandbox Code Playgroud)

如果我不打电话给free()内部会导致内存泄漏free_or_not()吗?

Sou*_*osh 7

如果我不打电话给free()内部会导致内存泄漏free_or_not()吗?

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

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