C语言 指针数组作为全局变量



我想在函数中使用指针数组,然后在主函数中可视化它的值。我想使用指针数组作为全局变量,但在主函数上,它不显示void函数的相同值。这是我第一次在stackoverflow上问任务,所以把我当作一个初学者。

int *temp[65];
static void save_value(int t){
int vet[64];
int sum;
int i;
for(i=0;i<64;i++){
vet[i]=0;
temp[i]=0;
}
for(i=0; i<64; i++){
sum = t ++;
vet[i]=sum;
temp[i]=&vet[i];
printf("Temp for = %dn", *temp[i]);
}
printf("n");
}
int main(int argc, char** argv) {
int i;
int value;
value=1;
save_value(value);
for(i=0; i<64; i++){
printf("Temp = %dn", *temp[i]);
}
return 0;
}

TL;DR全局指针数组中的指针指向无效内存

在函数save_value中,指向数组vet中值的指针被赋值给全局数组temp,数组vet是在堆栈上分配的,其中的值只有在save_value运行时才有效。

因此,在结束的printf语句中,不能依赖于temp中的指针值来产生一个有效值,因为分配给数组vet的内存不再为该目的保留。

您正在保存从函数返回后使用的堆栈变量的地址,这会导致未定义的行为

您可以通过几种方式修复它-例如

static void save_value(int t) {
static int vet[64]; <<<<===
int sum;
int i;
for (i = 0; i < 64; i++) {
vet[i] = 0;
temp[i] = 0;
}
for (i = 0; i < 64; i++) {
sum = t++;
vet[i] = sum;
temp[i] = &vet[i];
printf("Temp for = %dn", *temp[i]);
}
printf("n");
}

或者将全局设置为too