zoukankan      html  css  js  c++  java
  • c c++ 函数不要返回局部变量的指针

    结论:普通的变量(非new的变量)都是系统自动分配的,在栈空间(连续分配),无需程序员操作,速度快,但是...空间有限,不适合大量数据,大量的话就需要自己new

    new出来的变量是处于大容量的堆空间,分配方式可能类似与链表,当然,速度会慢

    在主函数中,如果定义的数组较大,所需空间较大,大概是10的6次方那么多,可能会出错,因为函数内部申请的局部变量,来自于系统的栈空空间,空间可能不够

    局部变量中的a数组,在栈中分配了空间,存了0,1,2等数据,函数结束后,返回的地址也确实给了main函数中的p变量,但该内存空间里可能已经没有东西了,比较危险

    可能你试一试还是能访问到数据,但那只是没有释放,可能在下一个定义的局部变量又用到了该空间,数据覆盖,就没了。

    int * F1()

    {

      int  a[10]={0,1,2};

      return a;

    }

    int main()

    {

      int * p =F1();

      cout<<p[0];//危险

    }

  • 相关阅读:
    redis主从架构
    redis持久化
    git 首次push失败
    Java8 CompletableFuture
    Mac Item2自动远程连接服务器
    Java8 日期和时间类
    【LeetCode】31. 下一个排列
    【LeetCode】30. 串联所有单词的子串
    【LeetCode】29. 两数相除
    【LeetCode】28. 实现 strStr()
  • 原文地址:https://www.cnblogs.com/lxzbky/p/10459288.html
Copyright © 2011-2022 走看看