返回值策略

可以用函数返回值来传递动态内存。这中方法比“指针的指针”简单多了

char *GetMemory(int num)
{char *p = (char *)malloc(sizeof(char) * num);return p;
}
void Test(void)
{char *str = NULL;str = GetMemory(100);  //str指向了动态分配的空间strcpy(str, "hello"); free(str)}

在使用返回值时,千万别返回指向“栈内存”的指针、引用,因为该内存在函数结束时自动消亡了,返回的指针是个野指针了。例如

char *GetString()
{char p[] = "hello world"; //数组内容存储在栈区,函数结束时,会释放掉return p;
}
void Test(void)
{char *str = NULL;str = GetString();      //因为非配的内存早已释放掉,此时的str是个野指针,内容是垃圾cout << str << endl;}

在函数中不定义数组,定义指针,示例:

char *GetString()
{char *p = "hello world"; //数组内容存储在静态区,函数结束时,不会释放掉return p;
}
void Test(void)
{char *str = NULL;str = GetString();      cout << str << endl;}

此时的程序是正确的,但是有一点,此时分配的内存处于静态区,是只可以读取但是不可以修改的。

c++ 动态分配内存相关推荐

  1. 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )

    文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...

  2. C/C++之动态分配内存

    C/C++之动态分配内存 c语言中,一般决定了变量的类型,就自动给决定了其作用域和存储时期,系统会自动给每个变量分配内存,在变量超出作用域和存储时期后,自动释放该变量所占用的内存. 除了自动分配内存, ...

  3. 二维数组动态分配内存

    二维数组动态分配内存 C 二维数组动态分配和释放 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char ...

  4. 静态分配内存和动态分配内存

    首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐.动态分配内存与静态分配内存的区别: 1) 静态内存分配是在编译时完成的 ...

  5. CC++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size) 函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址.  可以 ...

  6. c语言分配内存空间方法,C语言之动态分配内存空间

    动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...

  7. C 结构体嵌套一级指针 二级指针 动态分配内存

    https://blog.csdn.net/xielinhua88/article/details/51364623 点击打开链接 #define _CRT_SECURE_NO_WARNINGS #i ...

  8. hyperv动态内存Linux,Linux 之动态分配内存方式

    (1)malloc/free 函数 malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下: #include extern void* malloc(size_t _si ...

  9. (篇二)C语言动态分配内存、计算π的值

    文章目录 一.动态分配内存 二.猴子吃桃问题 三.两种计算π的值 四.计算指定年月有几天 本篇是接着分享一些有趣的C语言实例,其实学习C语言这类结构化语言是非常锻炼逻辑思维的,也可以让我们对编程语言有 ...

  10. C++走向远洋——43(人数不定的工资类,动态分配内存与释放)

    */* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:text.cpp* 作者:常轩* 微信公众号:Worldhello* ...

最新文章

  1. 洛谷P4609 [FJOI2016]建筑师 【第一类斯特林数】
  2. CodeIgniter开发实际案例-新闻网站【转】
  3. codeforces round 418 div2 补题 CF 814 A-E
  4. 段寄存器和8种地址寻址方式
  5. Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
  6. 【Ids4实战】分模块保护资源API
  7. 前端开发 跨平台的构架GSOAP
  8. SQLSERVER2005 收缩日志
  9. hutool的定时任务不支持依赖注入怎么办_可调度定时任务在SpringBoot中的实践
  10. 从文件中读取并进行树的存储_数据库中的面试题你能接几招
  11. 测试用例报告——模板
  12. 原生js获取屏幕高度
  13. stlink固件版本低,但升级失败的解决办法
  14. linux ap 模式,无线AP是什么,客户端模式(apclient)是什么意思?
  15. 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 打开;3 号将凡是 3 的倍数的灯作相
  16. KEAZ128 时钟配置
  17. IDEA 一直卡在Buil(编译 write classes)报错资源不足
  18. H5跳转小程序页面/wx-open-launch-weapp/
  19. 数据挖掘进行数据分析常用的方法
  20. DOS命令CD D:\ 不管用,怎么进入D盘

热门文章

  1. linux sparse 内核代码静态检查
  2. linux 源码编译upx 压缩软件
  3. VS不能编译指定版本(配置管理错误)
  4. Linux缓冲区溢出问题
  5. 系统架构领域的一些学习材料
  6. mysql 操作审计_利用mysql的audit审计功能记录用户操作信息
  7. mysql serial_mysql – 我应该对表id列使用数据类型SERIAL吗?
  8. protoc-3.2.0-win32转java文件
  9. 2018年计算机应用基础作业,2018年计算机应用基础作业二答案.doc
  10. 右边补0 润乾报表_制作按奖金分段统计的员工业绩报表