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