C Нет доступной памяти для программы: небезопасно вызывать ошибку malloc - PullRequest
0 голосов
/ 27 января 2012

Я пытаюсь создать все матрицы размером от 10x10 до 1000x1000 около 980. Я начинаю исчерпывать память, хотя программа явно не использует все 4 ГБ моей системы.Мой код выглядит так:

    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 OSX64bit

1 Ответ

1 голос
/ 27 января 2012

Я не уверен, насколько «ясно» вы на самом деле собираетесь не использовать всю память , доступную вашей программе . Если я правильно понял, в итоге вы получите 333 833 185 дублей. При восьми байтах каждый, это более 2,5 ГБ.

Не уверен, сколько доступно для средств управления памятью вашего компилятора C ... почему бы не написать простую программу, которая обнаружит, какой самый большой объем памяти вы можете использовать malloc ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...