我正在尝试通过函数中的指针写入颜色数组中的元素。函数为:
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]
时,你可以使用的索引是 0
、 1
和 2
,所以你应该改变这个值,因为当你尝试访问array
中的位置3
时,它会给出分割错误,因为它不在索引中。希望你能理解!