C语言数组的作用域和生命周期的疑问,附代码
如果数组定义在函数内,生命周期应该是在函数内部,会被分配在内存栈中,在函数调用完毕时,系统会自动释放栈内资源。
按我理解,函数调用完毕后,外部代码无法获取数组的值。malloc函数分配的空间在堆内,如果程序不主动释放,是一直存在的。
看下面代码:
char* f(){
char a[10];
sprintf(a, "hello_f");
char* ret = (char*) malloc(sizeof(char)*10);
strcpy(ret, a);
return ret;
}
char* f1(){
char a[10];
sprintf(a, "hello_f1");
return a;
}
int main(){
printf("%s\n", f());
printf("%s\n", f1());
}
输出结果是:
hello_f
hello_f1
f()的情况我理解,f1()为什么还可以访问到字符数组里的值,不是应该系统回收了么??数组的生命周期到底是什么啊??