首页 > 解决方案 > 无法在 C 中分配内存

问题描述

我想定义一个 3D 数组/指针来存储我的计算结果:

#include <stdio.h>

int main(void) {
    float ***ww;
    int i, j, k;
    int n1 = 3000, n2 = 6000, n3 = 9000;
    ww = floatalloc3(n1, n2, n3); /* floatalloc3 is a self-defined function used to allocate memory space for 3D array/pointer */
    for (i = 0; i < n1; i++) {
        for (j = 0; j < n2; j++) {
            for (k = 0; k < n3; k++) {
                ww[i][j][k] = 0.0;
            }
        }
    }
    free(**ww);
    free(*ww);
    free(ww);
    return 0;
}

但是弹出一个错误说cannot allocate 648000000000 bytes: Cannot allocate memory。那么我该如何解决这样的问题,有什么想法吗?

是否可以将数据拆分并存储到不同的核心?

标签: carraysout-of-memory

解决方案


您尝试分配的内存量似乎是巨大的:6480 亿字节加上 2 级间接的开销!您的系统可能不允许您分配那么多内存。

您应该测试 的返回值floatalloc3以检测分配失败。事实上,发布此自定义函数的源代码以确定其正确性将很有用。

另请注意,3free次调用可能不足以释放分配的块,但如果没有源代码floatalloc3,只能推测。


推荐阅读