加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在linux中为进程分配堆栈

发布时间:2020-12-13 22:51:21 所属栏目:Linux 来源:网络整理
导读:有人可以帮我理解这些程序的输出. int* fun1();void fun2();int main(){ int *p=fun1(); fun2(); printf("%dn",*p); return 0;}int* fun1(){ int i=10; return i;}void fun2(){ int a=100; printf("%dn",a);} 它在Windows上为100 100,在Linux上为100 10. W
有人可以帮我理解这些程序的输出.

int* fun1();
void fun2();

int main()
{
    int *p=fun1();
    fun2();
    printf("%dn",*p);

    return 0;
}

int* fun1()
{
    int i=10;
    return &i;
}

void fun2()
{
    int a=100;
    printf("%dn",a);
}

它在Windows上为100 100,在Linux上为100 10. Windows输出我能够证明由于局部变量在堆栈上分配的事实.但是在Linux中它是怎么来的100 10.

解决方法

返回指向超出范围并使用该指针的堆栈分配变量的指针是未定义的行为,纯粹而简单.

但我猜测答案“任何可能发生的事情”都不会为你削减它.

会发生什么事情,在* nix上,内存不会被回收,因此它不会被覆盖,而且在胜利时它就是.但这只是一个猜测,你最好的选择是使用调试器并遍历汇编程序代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读