gpt4 book ai didi

c++ - 无法在循环中动态分配内存(一个函数吃掉所有内存)

转载 作者:行者123 更新时间:2023-11-30 00:47:47 27 4
gpt4 key购买 nike

当我运行下面的代码时,在循环的第二次迭代中整个操作系统挂起。如果我打开任务管理器,它清楚地显示存在巨大的内存泄漏。在我开始执行代码后,所有内存在 4 秒内消失。

代码如下:

void matrix_vector_multiplication_comparison()
{
for (unsigned DIMS_SIZE = 64; DIMS_SIZE <= 2048; DIMS_SIZE += 64)
{

__declspec(align(16))float* m1 = generate_random_1d_matrix(DIMS_SIZE * DIMS_SIZE);
__declspec(align(16))float* m2 = generate_random_1d_matrix(DIMS_SIZE * DIMS_SIZE);
__declspec(align(16))float* v1 = generate_random_1d_matrix(DIMS_SIZE);
__declspec(align(32))float* v2 = generate_random_1d_matrix(DIMS_SIZE);
__declspec(align(16))float* res1 = new float[DIMS_SIZE];
__declspec(align(16))float* res2 = new float[DIMS_SIZE];
__declspec(align(32))float* res3 = new float[DIMS_SIZE];


// ........ other stuff here...........

delete[] m1;
delete[] m2;
delete[] v1;
delete[] v2;
delete[] res1;
delete[] res2;
delete[] res3;
}
}

当我注释掉代码中的所有内容并仅保留 __declspec(align()) 声明和 delete[] 在我的 for 循环,内存泄漏仍然存在,这表明问题实际上出在那些 __declspec 上。

generate_random_1d_matrixget_random_floatmain 函数如下所示:

float* generate_random_1d_matrix(unsigned const int dims)
{
size_t i;
float* result = new float[dims * dims];
for (i = 0; i < dims * dims; ++i)
result[i] = get_random_float(10, 100);
return result;
}

inline float get_random_float(float min, float max)
{
float f = (float)rand() / RAND_MAX;
return min + f * (max - min);
}

int main()
{
matrix_vector_multiplication_comparison();
return 0;
}

谁能告诉我这里出了什么问题以及如何解决内存问题?

更新

更改了提供的代码。我只留下了实际产生问题的部分。

最佳答案

delete[] m1, m2, v1, v2, res1, res2, res3;

这并不像您认为的那样。您正在使用 comma operator ,而您可能打算将多个内容传递给 delete[]。您需要自行删除每个变量:

delete[] m1;
delete[] m2;
delete[] v1;
delete[] v2;
delete[] res1;
delete[] res2;
delete[] res3;

关于c++ - 无法在循环中动态分配内存(一个函数吃掉所有内存),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com