c - 如何修复c中的 'access past the end of a local variable'

标签 c

我创建了一个函数来检查数组的 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/

相关文章:

c - C中的单链表(插入节点)

无法让这个与字符串相关的C语言程序运行

c - 我是否发现了 libxml2 错误(多线程解析中的内存泄漏)?

c - 如何检测 openGL/card 是否支持 2 的非幂?

c - C 中的内存分配,堆中的链接列表

C 交叉编译器链接 extern 声明为静态?

c - 如何在函数文件和项目文件中正确包含自己的库

c - Xlib:如何检查特定窗口是否最小化?

c - 随机播放数据而不是指向它的指针是一种不好的形式吗?

c++ - 宏参数上的 Foreach 宏