首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >program.exe编译后停止工作?

program.exe编译后停止工作?
EN

Stack Overflow用户
提问于 2014-04-06 13:32:30
回答 1查看 1.4K关注 0票数 0

我试图编写一个代码来获得数组的修补程序/子窗口。我编写了以下代码:

代码语言:javascript
运行
复制
#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已停止工作。我怎么才能解决这个问题?对于这种进程,我需要使用动态内存分配吗?还是有更简单的解决方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-06 13:39:20

这一行:

代码语言:javascript
运行
复制
for(r;r<(r+2);r++)

将运行的时间比您预期的长得多,从而导致缓冲区溢出。我认为您的意思是在启动循环之前保存r+2,然后与之进行比较。

另外,您将增加4次ij,因此您也可以访问b的范围。你需要重新思考你的循环逻辑。也许应该是:

代码语言:javascript
运行
复制
for (i = 0 ; i < 2; i++)
    for (j = 0; j < 2; j++) 
    {
        b[i][j] = a[r+i][s+j];
    }
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22894718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档