Как исправить «доступ через конец локальной переменной» в c - PullRequest
0 голосов
/ 23 марта 2019

Я сделал функцию, которая проверяет, равны ли 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];
}

Я хочу изменить значение matchArray [5], если выполняется условие if.

Edit: Мой главный это:

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;
}

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Вы передаете &matchArray[5], который является адресом 5-го элемента matchArray в качестве аргумента matchArray для match6.Так как matchArray соответствует только 6 элементам, это фрагмент только 1 элемента, что слишком мало.

Возможно, вы захотите передать matchArray - указатель на 0-й элемент, в этом случае вы 'Я получу часть всех 6 элементов.Тогда вы также, вероятно, захотите объявить аргумент для match6 как int matchArray[6]

0 голосов
/ 23 марта 2019

matchArray - это массив из 6 элементов, но параметр объявлен как имеющий только 5 int matchArray[5]. Таким образом, назначение в вызываемой функции matchArray[5] = 0 выходит за пределы, учитывая, как объявлен параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...