C没有可用于程序的内存:调用malloc错误不安全

时间:2012-01-27 01:03:01

标签: c performance memory

我正在尝试创建大小为10x10到​​1000x1000的所有矩阵,大约980我开始耗尽内存,即使程序显然没有使用我的所有4GB系统。我的代码如下:

    double **a3;
    double **result;
    a3 = malloc(k * sizeof(double *));
    for(i = 0; i < k; i++)
    {
        a3[i] = malloc(sizeof(double));
    }
    result = malloc(k * sizeof(double *));
    for(i = 0; i < k; i++)
    {
        result[i] = malloc(k * sizeof(double));
    }
    for(i = 0; i < k; i++)
    {
        for( j = 0; j < k; j++)
        {
            a3[i][j] = 0;
            result[i][j] = 0;
        }
    }
    ...
    for(i = 0; i < k; i++)
{
    free(a3[i]);
    free(result[i]);
}
free(a3);
free(result);

我不确定为什么这不起作用(如果我使用int数组但它需要双数组,它确实有效)

我正在使用Mac OSX 64位

1 个答案:

答案 0 :(得分:1)

我不确定你实际上对于不使用程序可用的所有内存有多么“清楚”。如果我正确地计算,你最终会分配总共333,833,185双打。每个八个字节,超过2.5GB。

不确定你的C编译器的内存管理工具有多少可用...为什么不编写一个简单的程序来发现你可以使用malloc()的最大内存量呢?