gpt4 book ai didi

c - 如何释放 C 中的内存?

转载 作者:太空狗 更新时间:2023-10-29 16:22:05 26 4
gpt4 key购买 nike

我正在编写包含大量一维和二维数组的代码。我收到“错误:无法分配区域”,我认为这是因为分配了太多内存。我使用“malloc”和“free”函数,但我不确定我是否正确使用了它们。也许您知道我在哪里可以看到有关 C 语言内存管理的优秀示例?

所以..我只是想让一个算法工作,现在这段代码只是一个接一个的函数..

//memory allocation for 1D arrays
buffer = malloc(num_items*sizeof(double));

//memory allocation for 2D arrays
double **cross_norm=(double**)malloc(150 * sizeof(double *));
for(i=0; i<150;i++)
{
cross_norm[i]=(double*)malloc(num_items*sizeof(double));
}

//code
Window(N, window_buffer);
STFTforBMP(buffer,N,f, window_buffer);
getMagnitude(buffer,f, N, magnitude);
calculateEnergy(flux,magnitude, f);
calculateExpectedEnergy(expected_flux, candidate_beat_period, downbeat_location, f);
calculateCrossCorrelation(cross, flux, expected_values, f);
findLargestCrossCorrelation(&cross_max, cross, f);
normalizeCrossCorrelation(cross_norm, &cross_max, cross, f);
...............

我该如何使用free功能?

最佳答案

您必须按照与使用 malloc() 分配内存的方式完全相反的顺序来free() 分配的内存。

请注意,只有在使用完分配的指针后才应释放内存。

一维数组的内存分配:

    buffer = malloc(num_items*sizeof(double));

一维数组的内存释放:

    free(buffer);

二维数组的内存分配:

    double **cross_norm=(double**)malloc(150 * sizeof(double *));
for(i=0; i<150;i++)
{
cross_norm[i]=(double*)malloc(num_items*sizeof(double));
}

二维数组的内存释放:

    for(i=0; i<150;i++)
{
free(cross_norm[i]);
}

free(cross_norm);

关于c - 如何释放 C 中的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9069205/

26 4 0
文章推荐: android - 缺少 android_winusb.inf 文件;尝试为 Kindle Fire dev 设置环境
文章推荐: android - 可以处理 Android SQL 数据库中字符串的本地化吗?
文章推荐: java - 在不分配 ListIterator 的情况下反转集合 List