我写了一个小代码,该代码接受一个包含10个值的数组,并将该数组传递给一个使每个值加倍的函数。数组在函数内打印期望值(双精度)。回到main函数中,输出的输出在for循环中的索引1、2和3的垃圾值表示要打印所有值。为什么这些值会改变?主函数和被调用函数的地址相同。
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
答案 0 :(得分:1)
int temp[b];
在该函数中是本地的。
从函数返回后,该内存的生存期将终止,对其进行访问将产生未定义的行为。