【发布时间】:2020-03-17 06:34:46
【问题描述】:
我正在使用遗留的 C++ 代码,该代码使用 malloc 保留一块内存并将其划分为单独释放的部分。像这样的:
const int N_floats_per_buffer = 100;
const int N_buffers = 2;
//reserve buffers en bloque
float * buffer = (float*) malloc(N_float_per_buffer * N_buffers * sizeof(float));
//then this block memory is divided into sub-blocks
float * sub_buffer[N_buffers];
for(int j = 0; j < N_buffers; ++j)
{
sub_buffer[j] = buffer + j*N_floats_per_buffer;
}
//do something with the buffers...
//...
//finally: memory is freed for the individual buffers
for(int j = 0; j < N_buffers; ++j)
{
if(sub_buffer[i]!=NULL) free(sub_buffer[j]);
}
在实际代码中实际上更令人困惑,但我想我已经抓住了它的精髓。
我的问题是:这是内存泄漏吗?
【问题讨论】:
-
free的使用无效:您只能使用free已有的malloced(calloced,strduped,...)。您的sub_buffers 是指向现有内存的指针,而不是分配内存的句柄。但是你应该在完成后free(buffer)。 -
@walnut 我删除了 C 标记,因为代码是使用 MSVC 版本 1900 编译的。关于可变长度数组:我输入错误并忘记了整数长度变量前面的 const。我在编辑中更正了它。这是你的意思吗?
-
@geo 是的,这就是我的意思。
const解决了,是的。
标签: c++ memory-leaks malloc free