我创建了一个函数来检查数组的 6 个元素是否相等,如果相等则更改另一个数组的值。它可以编译,但是当我运行它时,我得到“堆栈缓冲区溢出”,并且我的编译器说我的数组未初始化,即使我初始化了它。
我尝试在函数中重新定义整个数组,但这给出了“预期表达式”错误。
int match(int numbers[], int matchHighest){
int matchArray[] = {0, 0, 0, 0, 0, 0};
int i = 0;
match6(&numbers[i], &matchArray[5]);
matchHighest = matchArray[5];
return matchHighest;
}
int match6 (int numbers[], int matchArray[5]){
int i=0;
matchArray[5] = 0;
while((numbers[i]==numbers[i+1]) && (i<4)){
i++;
}
if(i == 4){
matchArray[5] = 6 * numbers[0] + 27;
}
return matchArray[5];
}
如果满足 if 语句,我希望它更改 matchArray[5] 的值。
编辑: 我的主要是:
int main(void){
int numbers[6]={0,0,0,0,0,0};
int matchHighest = 0;
inputArray(numbers);
match(numbers, matchHighest);
printf("test worked \n");
return 0;
}
最佳答案
您正在传递 &matchArray[5]
,它是 matchArray 的第 5 个元素的地址,作为 match6 的 matchArray
参数。由于 match 的 matchArray 只有 6 个元素,因此这是一个只有 1 个元素的切片,太小了。
您可能想要传递 matchArray
——指向第 0 个元素的指针,在这种情况下,您将获得所有 6 个元素的切片。那么您可能还想将 match6 的参数声明为 int matchArray[6]
关于c - 如何修复c中的 'access past the end of a local variable',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55309570/