如何在C中定义非常大的2D数组(如1000*1000)

如何在C中定义非常大的2D数组(如1000*1000),c,arrays,string,visual-studio,int,C,Arrays,String,Visual Studio,Int,解决办法是什么? 你知道有什么方法可以帮我创建一个大数组吗? 我使用(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

解决办法是什么? 你知道有什么方法可以帮我创建一个大数组吗? 我使用(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;
}
#包括
#包括
#定义真1
int main()
{
int i,j;
INTA[1000][1000];
int b[1000][1000];
int x=0;
i=0;
while(true)
{
scanf_s(“%d”和&b[i]);
scanf_s(“%c”和“ch”);
如果(ch!='-')
{
x=(i+1);
打破
}
i++;
}
printf(“%d\n\n”,x);
对于(i=0;i
我用malloc更改了它,但它仍然有运行时错误

#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;
}
#包括
#包括
#定义真1
int main()
{
int n;
扫描频率(“%d”和“&n”);
int i,j;
int**b=(int**)malloc(10000*sizeof(int*);
对于(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”);
如果(ch!='-')
{
x=(i+1);
打破
}
i++;
}
printf(“%d\n\n”,x);
对于(i=0;i
将程序编译为x64而不是x86。x86堆大小(microsoft编译器限制为2GB)


选择x64“导致错误代码”什么错误?你需要展示问题以获得帮助。你在用什么编译器?这是什么站台?这些数组每个都有1000000个元素,所以它们的大小大约为兆字节。如果这是针对微控制器的,那就不合适了。您可以在堆栈上分配
inta[1000][1000]
。您可以很快用完堆栈空间。最好全局分配,或者使用
malloc
scanf_s
要求为c、c、s、s或c类型的所有输入参数指定缓冲区大小[.缓冲区大小作为附加参数在指向缓冲区或变量的指针后立即传递。您不需要这样做。可能,如果您打开编译器的警告,它将警告您。并且
ch
未声明。亲爱的Paul Ogilvie,当我使用malloc创建2D数组时,我从visual studio收到stackoverflow消息。我该怎么办?@PaulOgilvieUnhandled exception at 0x7a9af5c(ucrtbased.dll)in㶍㶫㶩㶋پ.exe:0xC0000005:访问冲突读取位置0x0000007A。这是visual studio错误<我该怎么办?修改你的问题,不要回答它怎么办?我不知道怎么办?@MostafaBorhani看到我的答案时闷闷不乐