Как определить очень большой 2D массив в C (например, 1000 * 1000) - PullRequest
0 голосов
/ 05 января 2020

в чем решение? Вы знаете способ помочь мне создать большой массив? Я использовал оператор (int), который без проблем создает массив 100 * 100, а эта команда для массива 1000 * 1000 вызывает код ошибки.

#include<stdio.h>
#include<string.h>
#define true 1

int main()
{
    int i, j;

    int a[1000][1000];
    int b[1000][1000];
    int x = 0;
    i = 0;
    while (true)
    {
        scanf_s("%d", &b[i]);
        scanf_s("%c", &ch);
        if (ch !='-')
        {
            x = (i+1);
            break;
        }
        i++;
    }
    printf("%d\n\n", x);

    for (i = 0; i < x; i++)
    {
        for (j = 0; j < strlen(b[i]); j++)
        {
            printf("%d\n\n", b[i][j]);
        }
    }


return 0;
}

Ответы [ 2 ]

0 голосов
/ 05 января 2020

Скомпилируйте программу как x64, а не как x86. В x86 размер кучи (компилятор Microsoft ограничен 2 ГБ).

enter image description here

Выберите x64

0 голосов
/ 05 января 2020

я изменил его с помощью mallo c, но все равно есть ошибка времени выполнения

#include<stdio.h>
#include<string.h>
#define true 1

int main()
{
    int n;
    scanf_s("%d", &n);
    int i, j;

    int** b = (int**)malloc(10000 * sizeof(int*));
    for (i = 0; i < 100000; i++)
    {
        b[i] = (int*)malloc(10000 * sizeof(int));
    }
    char ch;
    int x = 0;
    i = 0;
    while (true)
    {
        scanf_s("%d", &b[i]);
        scanf_s("%c", &ch);
        if (ch != '-')
        {
            x = (i + 1);
            break;
        }
        i++;
    }
    printf("%d\n\n", x);

    for (i = 0; i < x; i++)
    {
        for (j = 0; j < strlen(b[i]); j++)
        {
            printf("%d\n\n", b[i][j]);
        }
    }
    return 0;
}
...