C:写入树莓派上的数组指针时出现分段错误



我正在尝试通过函数中的指针写入颜色数组中的元素。函数为:

void setColor(int color1[3],int color2[3], int *red, int *green, int *blue) {
int redInc = (color2[1]-color1[1])/range;
int greenInc = (color2[2]-color1[2])/range;
int blueInc = (color2[3]-color1[3])/range;
int i = 0;
while (i < range) {
    *(red+i) = color1[1] + i*redInc;
    printf("This is red: %sn",*(red+i));
    *(green+i) = color1[2] + i*greenInc;
    *(blue+i) = color1[3] + i*blueInc;
    i++;
}
return;}     

范围定义为常数 21。主循环内部:

int color1[3] = {255,0,0};
int color2[3] = {0,255,0};
int red[21] = {0};
int green[21] = {0};
int blue[21] = {0};
setColor(color1,color2,red,green,blue);

我已经在我的 Linux 机器上尝试过这段代码,它似乎可以工作,但它在我的树莓派上出现了 Seg 错误。这是我尝试访问阵列的方式吗?

C 是零索引的,这意味着如果你有一个 3 整数长的数组,你可以使用索引 0、1 和 2 访问它

例:

int ex[3] = {1,2,3};
printf("%d %d %d", ex[0], ex[1], ex[2]);

将输出:

1 2 3

因此,您需要做的是检查您的代码并检查您在哪里不正确地索引数组,这看起来像所有数组都在函数void setColor(int color1[3],int color2[3], int *red, int *green, int *blue)

这是我尝试访问阵列的方式吗?

是的!数组索引从 0 开始,以大小 - 1 结束,其中大小是数组的长度。


这里:

*(blue+i) = color1[3] + i*blueInc;

color1超出范围,因为它的大小为 3:

int color1[3] = {255,0,0};

并且您通过color1[2]访问它,这会导致未定义的行为,并且很可能是您提到的分段错误。

当你初始化array color1[3]时,你可以使用的索引是 012 ,所以你应该改变这个值,因为当你尝试访问array中的位置3时,它会给出分割错误,因为它不在索引中。希望你能理解!

相关内容

  • 没有找到相关文章

最新更新