回 帖 发 新 帖 刷新版面

主题:请问这一段为什么会让系统崩溃?

void fill(int x, int y)
{
    void    *buffer;
    int    size;
    size = imagesize(Lefbord,Topbord,Rigbord,Botbord);
    buffer = malloc(size);
    getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);
    setactivepage(1);
    putimage(Lefbord,Topbord,buffer,COPY_PUT);
    setfillstyle(1,GREEN);
    if(getpixel(x+1,y+1)!=GREEN) {
        floodfill(x+1,y+1,GREEN);
        if(getpixel(xb1,yb1)!=GREEN && getpixel(xb2,yb2)!=GREEN) {
            getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);
            putimage(Lefbord,Topbord,buffer,COPY_PUT);
        }
    }
    if(getpixel(x-1,y+1)!=GREEN) {
        floodfill(x-1,y+1,GREEN);
        if(getpixel(xb1,yb1)!=GREEN && getpixel(xb2,yb2)!=GREEN) {
            getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);
            putimage(Lefbord,Topbord,buffer,COPY_PUT);
        }
    }
    if(getpixel(x-1,y-1)!=GREEN) {
        floodfill(x-1,y-1,GREEN);
        if(getpixel(xb1,yb1)!=GREEN && getpixel(xb2,yb2)!=GREEN) {
            getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);
            putimage(Lefbord,Topbord,buffer,COPY_PUT);
        }
    }
    if(getpixel(x-1,y-1)!=GREEN) {
        floodfill(x+1,y+1,GREEN);
        if(getpixel(xb1,yb1)!=GREEN && getpixel(xb2,yb2)!=GREEN) {
            getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);
            putimage(Lefbord,Topbord,buffer,COPY_PUT);
        }
    }
    setactivepage(0);
    putimage(Lefbord,Topbord,buffer,COPY_PUT);
    setvisualpage(0);
    free(buffer);
}

回复列表 (共2个回复)

沙发

你说的系统崩溃是指什么?还有建议跟踪你的buffer , void*太容易出错了

板凳

崩溃可能的原因如下:
1   size = imagesize(Lefbord,Topbord,Rigbord,Botbord);的调用是否会崩溃?
2   1 不会崩溃,那么返回的size的值是多少呢?如果很大,会导致接下来的malloc()失败。
3   getimage(Lefbord,Topbord,Rigbord,Botbord,buffer);的调用会失败吗?如果2失败了,返回一个空指针,那么3确保已经处理了空指针?
。。。 
。。。
太多可能崩溃的原因了,楼主先要排除调用其他函数会失败的可能。
    比如你可以在size = imagesize(Lefbord,Topbord,Rigbord,Botbord);的前后都加打印信息或者把打印信息写到文件中,如果前后都打印出来确保这行调用没问题,如果只打出前一行那么崩溃就在这个函数里边了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册