繁体   English   中英

返回指针并在C中释放它的内存泄漏

[英]Memory Leak in Returning a Pointer and Freeing it in C

我有以下代码:

char *get_packet(int cc, char *args[]){

    char *packet;
    packet = (char*) malloc(30 * sizeof(char));

    //other code..

    ...

    return packet;
}

int main(){

    int cc = SCANS_TO_ACCUMULATE;
    int args[] = {5000};

    char *str_args[15];
    int i = 0;
    for(i; i<((sizeof(args)/sizeof(args[0]))); i++){
           char buffer[10];
           sprintf(buffer, "%d", args[i]);
           str_args[i] = strdup(buffer);
           free(buffer);
    }
    str_args[i] = NULL;

    char *pkt;
    pkt = get_packet(cc, str_args);
    printf("%s\n", pkt);
    free(pkt);
    pkt = NULL;
    getchar();

    return 0; 
}

但是,运行该命令会导致我的程序立即崩溃,并且在对Dr.Memory进行检查之后,似乎出现了内存泄漏,但是我似乎找不到发生这种情况的原因。 我没有正确释放malloc的内存吗? 提前致谢

您的代码尝试释放未动态分配的buffer内存,即本地变量数组。 这会导致崩溃。

这里:

char buffer[10];
...
free(buffer);

您无法释放本地数组,请删除对free的调用。 当变量超出范围时,内存将自动释放。

释放本地数组“缓冲区”是未定义的,并且可能是可怕的行为! 您不能释放某些东西,除非它是用malloc()或calloc()分配的。 这很可能破坏堆并导致崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM