2d数组导致运行时错误

时间:2014-11-09 07:04:57

标签: c++ arrays

这是我的代码,奇怪的是它的摘录工作正常。但是,主程序由于此数组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为单位递增其值时,会导致运行时错误。

2 个答案:

答案 0 :(得分:0)

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

尝试

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

代替。

答案 1 :(得分:-1)

我认为你必须在 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]]++;
            }