我做了一个函数,检查一个数组的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]

09-11 13:02