【发布时间】:2020-09-02 13:04:21
【问题描述】:
当我使用边界填充算法(在 C 中)时,我遇到了分段错误(核心转储)错误。 你知道为什么它不起作用吗?
void boundaryFill(int x, int y, png_byte cr, png_byte cg, png_byte cb, png_byte cfr, png_byte cfg, png_byte cfb)
{
png_byte* row = row_pointers[y];
png_byte* ptr = &(row[x*3]);
if((ptr[0]!=cr || ptr[1]!=cg || ptr[2]!=cb) && (ptr[0]!=cfr || ptr[1]!=cfg || ptr[2]!=cfb))
{
writePixel(x, y, cfr, cfg, cfb);
boundaryFill(x+1,y, cr, cg, cb, cfr, cfg, cfb);
boundaryFill(x,y+1, cr, cg, cb, cfr, cfg, cfb);
boundaryFill(x-1,y, cr, cg, cb, cfr, cfg, cfb);
boundaryFill(x,y-1, cr, cg, cb, cfr, cfg, cfb);
}
}
【问题讨论】:
-
??????小心前行,看看会发生什么?
-
这不是一个完整的例子,变量名非常不透明。
row_pointers来自哪里? -
这是一张 600x600 的 png 图片
-
您永远不会检查您的
x和y是否有效,即在图像边界内。所以row_pointers[y]或ptr = &(row[x*3])中的任何一个都可能导致未定义的行为。 -
编辑问题以提供minimal reproducible example。