int* function(){
int a =100;
int * ptra = &a;
return ptra;
};
int main(){
int * ptr;
ptr =function();
printf("data is %d",*ptr);
}
上述代码打印为100; 为什么变量a没有被释放掉?
如果改成以下代码,变量a会被释放掉,出现segment fault。这是为什么?
int* function(){
int a =100;
return &a;
};
int main(){
int * ptr;
ptr =function();
printf("data is %d",*ptr);
}
第二种因为函数调用结束后该局部自动变量被抛弃,这个指针指向一个不再存在的对象(野指针),是无意义的,故而会出现segment fault
第一种你多次调用后,发现地址并没有发生变化的,也就是说,你每一次调用function()返回的地址都是一样的,所以那样的使用是不安全的,那个对的数据,只是遗留下来可被后续压栈操作覆盖的无用数据
两种情况下 a 都释放了,返回指向局部变量的指针是未定义的行为: