zoukankan      html  css  js  c++  java
  • C++的内存分配问题

    char *fun(void)
    {
    char *p="hello";
    return p;
    }

    int main(void)
    {
    char *s;
    s=fun();
    printf("%s\n",s);
    }

    程序运行后有什么问题呢?

    一般人可能会回答说是内存错误,实际上不是,

    char *p="hello";

    分配在常量区,不会立即释放。

    如果是如下的程序

    char *fun(void)
    {
    char p[]="hello";//注意
    return p;
    }
    int main(void)
    {
    char *s;
    s=fun();
    printf("%s\n",s);
    }

    很多人回答说是会出错。而我在运行过程中,却没发现出错。

    原因如下:

    如果对已经释放了的内存进行读写操作,那这个行为导致的结果是未定义的。
    “未定义”就是说随着程序的运行情况而定,有时候这次运行你去读,没有问题,依旧能读取东西出来;但是下一次运行,未必能成功。更严重的情况就是导致崩溃。
     


  • 相关阅读:
    Vue基础
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    Document
  • 原文地址:https://www.cnblogs.com/likwo/p/1915614.html
Copyright © 2011-2022 走看看