返回指向局部变量的指针很安全哪

weiweishuo weiweishuo 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面一段程序:
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); (别名)

- **生命周期**:函数返回后,局部变量(包括指针和引用)的生命周期结束,除非返回的是静态变量或动态分配的内存。返回局部变量的指针或引用会导致悬挂指针或引用,这是编程错误。

weixin_38502239

不能返回本地变量的指针.c

在C语言中,指针是基本的数据结构,它们能够存储变量的内存地址。然而,并不是所有类型的指针都可以安全地返回指向局部变量的地址。在函数中返回指向局部变量的指针会引发严重的内存安全问题。

学编程的闹钟

野指针问题

**返回栈内存的指针**:在函数中分配的局部变量位于栈上,当函数执行完毕后,这些变量所占的内存会被自动释放。如果函数返回了指向这些局部变量的指针,那么当函数返回后,这些指针就成为了野指针。

myeric2008

使用C语言实现,寻找指定元素的指针 应用返回指针的函数实现返回这顶元素的指针

在使用指针作为函数的返回值时,需要注意的是返回局部变量的地址是不安全的,因为局部变量在函数返回后生命周期结束,其地址可能被释放或覆盖,从而导致悬空指针。

贝塔实验室

C++指针应用及注意问题

当函数返回时,局部变量的存储空间会被释放,如果返回局部变量的地址(如`example2`),会导致悬空指针,后续访问可能会产生未定义行为。5.

hzsteven
评论 10
收藏 已收藏
分享
返回顶部
weiweishuo
C语言 70,040 成员 243,237 内容