Почему значения массива отличаются от присвоенных значений программы C - PullRequest
0 голосов
/ 07 апреля 2019

Я написал небольшой код, который принимает массив из 10 значений, передает массив в функцию, которая удваивает каждое значение.Массив печатает ожидаемые значения (double) внутри функции.Вернувшись в основную функцию, напечатанный вывод имеет значения мусора для индексов 1, 2 и 3 в цикле for, предназначенном для печати всех значений.Почему эти значения изменены?Адрес одинаков как в основной, так и в вызываемой функциях.

StructA doubleArray(int* alist, int b) {

    StructA doubled;
    int temp[b];
    for(int i=0; i < b; i++){
        temp[i] = 2 * alist[i];
    }
    doubled.a = temp;
    doubled.b = b;
    return doubled;
}

int main() {

    int arange[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int len = 10;
    StructA hasDoubledValues = doubleArray(arange, len);
    printf("\nvalues in main :");
    for(int k = 0; k < hasDoubledValues.b; k++){
        printf(" %d  \n", hasDoubledValues.a[k]);
    }
    return 0;
}

его значения для печати: 0 0 -14334592 32507 8 10 12 14 16 18 Я ожидал, что значения будут: 0 2 4 6 8 10 12 14 16 18

1 Ответ

1 голос
/ 07 апреля 2019

int temp[b]; локально для функции. Как только вы вернетесь из функции, время жизни этой памяти прекратится, и доступ к ней приведет к неопределенному поведению.

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