#c #arrays
#c #массивы
Вопрос:
Я написал небольшой код, который принимает массив из 10 значений, передает массив функции, которая удваивает каждое значение. Массив выводит ожидаемые значения (double) внутри функции. Возвращаясь к функции main, выводимый вывод содержит значения мусора для индексов 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. @xing спасибо. Это сработало должным образом
Ответ №1:
int temp[b];
является локальным для функции. Как только вы возвращаетесь из функции, время жизни этой памяти прекращается, и доступ к ней приведет к неопределенному поведению.