2d数组导致运行时错误

2d array causing run time error

本文关键字:运行时错误 数组 2d      更新时间:2023-10-16

这是我的代码,奇怪的是,它的摘录工作得很好。但是,由于此数组ss,主程序出现运行时错误。

#define FOR(i,n) for(i=0;i<n;i++)
unordered_map<int,int>m;

int ss[1000][1000]={0};
        FOR(i,n){
            FOR(j,n){
                if( (i+1 < n) && A[i][j]==A[i+1][j]+1 )
                {
                    if(ss[i][j]==-1)ss[i+1][j]=A[i][j];
                    else ss[i+1][j]=ss[i][j];m[ss[i+1][j]]++;
                }
                if((j+1 < n) && A[i][j]==A[i][j+1]+1)
                {if(ss[i][j]==-1)ss[i][j+1]=A[i][j];
                else ss[i][j+1]=ss[i][j];m[ss[i][j+1]]++;
                }

当我试图以m为单位增加它的值时,它会导致运行时错误。

如果sizeof(int)在您的平台上为4,则ss将需要大约4 MB的内存。对于您的平台来说,这可能是太多的堆栈内存。使用堆内存来解决这个问题。

尝试

std::vector<std::vector<int>> ss(1000, std::vector<int>(1000, 0));

相反。

我认为您必须在FOR(i,n)之前定义整数变量"i和j";

试试这个:

int ss[1000][1000]={0};
    int i,j;
    FOR(i,n){
        FOR(j,n){
            if( (i+1 < n) && A[i][j]==A[i+1][j]+1 )
            {
                if(ss[i][j]==-1)ss[i+1][j]=A[i][j];
                else ss[i+1][j]=ss[i][j];m[ss[i+1][j]]++;
            }
            if((j+1 < n) && A[i][j]==A[i][j+1]+1)
            {if(ss[i][j]==-1)ss[i][j+1]=A[i][j];
            else ss[i][j+1]=ss[i][j];m[ss[i][j+1]]++;
            }