返回指向局部变量的指针很安全哪
下面一段程序:
int main(void){
int *j=getPInt();
pad();
pad();
pad();
pad();
pad();
printf("j points to a local location,it is%d",*j);//输出100;
}
void pad(void){
int a=0;
}
int *getPInt(void){
int i=100;
return &i;
}
我以为不会输出是100,因为getPInt函数返回,它的局部变量i那块儿内存也就被弹出栈空间。
我在pad函数里定义变量,想继续堆栈把那块儿“100”的内存给覆盖掉。
为什么还会是100呢?
我只是想验证返回指向局部变量的指针不保险,可发现它很安全那!
小弟新手,言辞愚蠢之处还请指教。-.-
int main(void){
int *j=getPInt();
pad();
pad();
pad();
pad();
pad();
printf("j points to a local location,it is%d",*j);//输出100;
}
void pad(void){
int a=0;
}
int *getPInt(void){
int i=100;
return &i;
}
我以为不会输出是100,因为getPInt函数返回,它的局部变量i那块儿内存也就被弹出栈空间。
我在pad函数里定义变量,想继续堆栈把那块儿“100”的内存给覆盖掉。
为什么还会是100呢?
我只是想验证返回指向局部变量的指针不保险,可发现它很安全那!
小弟新手,言辞愚蠢之处还请指教。-.-
...全文
相关推荐
cpp代码-函数返回值:值传递 指针传递 引用传递 (返回值 返回指针 返回引用) int Fun(int a); int *Fun(int a); int &Fun(int a); (别名)
- **生命周期**:函数返回后,局部变量(包括指针和引用)的生命周期结束,除非返回的是静态变量或动态分配的内存。返回局部变量的指针或引用会导致悬挂指针或引用,这是编程错误。
不能返回本地变量的指针.c
在C语言中,指针是基本的数据结构,它们能够存储变量的内存地址。然而,并不是所有类型的指针都可以安全地返回指向局部变量的地址。在函数中返回指向局部变量的指针会引发严重的内存安全问题。
野指针问题
**返回栈内存的指针**:在函数中分配的局部变量位于栈上,当函数执行完毕后,这些变量所占的内存会被自动释放。如果函数返回了指向这些局部变量的指针,那么当函数返回后,这些指针就成为了野指针。
使用C语言实现,寻找指定元素的指针 应用返回指针的函数实现返回这顶元素的指针
在使用指针作为函数的返回值时,需要注意的是返回局部变量的地址是不安全的,因为局部变量在函数返回后生命周期结束,其地址可能被释放或覆盖,从而导致悬空指针。
C++指针应用及注意问题
当函数返回时,局部变量的存储空间会被释放,如果返回局部变量的地址(如`example2`),会导致悬空指针,后续访问可能会产生未定义行为。5.


