访问冲突读取位置C阵列

时间:2017-09-29 04:10:10

标签: c arrays visual-studio

我有以下代码:

int calculate_sum_dice(int *dice[2]) {
int sum = 0;
for (int i = 0; i < 2; i++) {
    sum += *dice[i];
}
return (sum);
}

dice是一个整数数组,初始化如下:

int die1 = roll_die();
int die2 = roll_die();
int *dice[2] = { die1, die2 };

sum += *dice[i]

引发访问冲突读取位置错误

我试着做

sum += dice[i]

但它也会引发错误。

我是C的新手,所以尽管看起来有点陈旧,但我还是感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

这是违反约束的行为:

int *dice[2] = { die1, die2 };

意思是它不是有效的C代码。您的编译器必须生成指向该行的诊断消息,或者它不是正确的C编译器。如果确实如此,则不要忽略该消息。如果没有,请获得更好的编译器。

至于让代码工作,只需将指针声明放在调用者中并同时运行。

int dice[2] = { die1, die2 };
calculate_sum_dice(dice);


int calculate_sum_dice(int dice[2])
{
  ...
  sum += dice[i];
函数中的

dice将默默地“衰减”到指向数组第一个元素的指针。