免费数据时内存泄漏?

时间:2017-04-16 02:15:13

标签: c memory-management memory-leaks

我用C编写程序来解码数据。数据已压缩,因此我试图通过在解压缩中获得正确的结果来解压缩数据和成功。然后,我将此解压缩数据传递给其他进程。此过程分配新数据,从传入的数据中读取,写入新数据,然后释放旧数据(因为它不再被使用)。但是,当运行时,它会生成一个错误" decode.exe已经触发了一个断点"在" free()"叫线。 我的代码是:

int decode (uint8_t* data, uint32_t size) {
    compressed_stream stream;
    stream.data = data;
    stream.data_size = size;

    uint32_t outsize;
    //Compute output size and assign to outsize
    //...
    stream.out = (uint8_t*)malloc(outsize);
    stream.size = outsize;

    stream.inpos = stream.outpos = 0;
    decompress(&stream);
    //Not free stream.data yet
    process(stream.out);
    return 0;    //Handling error later
}

"解压缩()"函数经过测试,它不会尝试将指针更改为分配的输出数据。我的数据没有错误,"超大"计算等于输出所需的大小," malloc()"返回非空数据

并且,流程如下:

int process(uint8_t* data)
{
    //Process data here, assign it to global scope pointers for easy handling
    //...
    free(data);
    return 0;
}

同样,已处理的数据已经过测试,不会发生错误。但是当我到达线路时,我会崩溃,而#34;免费(数据)"。

我尽量不使用" process()"在" decompress()"之后func并释放与stream.out相关的数据。但它仍然发生了。 但是,当我试图改变" free(数据);"到:

realloc(data, 1);
free(data);

没有错误发生。或者,当我改变"大尺寸"比没有realloc数据的解压缩数据输出所需的值大得多的值,也没有错误。

我不知道" malloc()"和" free()" FUNC。我的程序工作正常,它产生我需要的数据,但我想优化它使用的内存。感谢您的帮助或解释!

1 个答案:

答案 0 :(得分:0)

现在我发现了问题所在,我的“decompress()”函数写入的字节数超过了“malloc()”为输出分配的内存大小。它没有像我预期的那样产生错误。非常感谢@Nguai al对你的评论。我尝试在处理之前存储内存的位置,在解压缩时修改位置,然后进行减法。然后,我发现它大于我之前分配的内存大小。