[英]program.exe stops working after compiling?
我正在尝试编写代码来获取数组的patch / sub_window。 我写了以下代码:
#include <stdio.h>
int patch(int a[5][5],int b[2][2],int r,int s)
{
int i=0,j=0,k;
if(r<=(5-2) && s<=(5-2)){
for(r;r<(r+2);r++){
for(s;s<(s+2);s++)
{
k = a[r][s];
b[i][j] = k;
i = i+1;
j = j+1;
}
}
}
else
{printf("error!");}
return 0;
}
int main()
{
int i,j,p,q;
int y[2][2] = {0};
int x[5][5] = {{95,155,200,200,232},
{100,155,232,95,150},
{200,45,200,135,123},
{232,150,85,69,180},
{95,95,200,123,45}
};
for(i=0;i<5;i++){
for(j=0;j<5;j++){
patch(x,y,i,j);
for(p=0;p<2;p++){
for(q=0;q<2;q++)
{
printf("y[%d][%d] = %d\n",p,q,y[p][q]);
}
}
}
}
return 0;
}
但是,一旦我运行并编译了这段代码,就会收到一条错误消息,指出program.exe已停止工作。 我怎样才能解决这个问题 ? 我需要在这种过程中使用动态内存分配吗? 还是有一个更简单的解决方案。
这行:
for(r;r<(r+2);r++)
将比您预期的运行更长的时间,从而导致缓冲区溢出。 我认为您的意思是在开始循环之前保存r+2
,然后与之进行比较。
另外,您将i
和j
递增4次,因此也可以访问b
的边界。 您需要重新考虑循环逻辑。 也许应该是:
for (i = 0 ; i < 2; i++)
for (j = 0; j < 2; j++)
{
b[i][j] = a[r+i][s+j];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.