c++ 动态分配内存
返回值策略
可以用函数返回值来传递动态内存。这中方法比“指针的指针”简单多了
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++ 动态分配内存相关推荐
- 【Linux 内核 内存管理】Linux 内核内存布局 ③ ( Linux 内核 动态分配内存 系统接口函数 | 统计输出 vmalloc 分配的内存 )
文章目录 一.Linux 内核 动态分配内存 系统接口函数 二.统计输出 vmalloc 分配的内存 一.Linux 内核 动态分配内存 系统接口函数 Linux 内核 " 动态分配内存 & ...
- C/C++之动态分配内存
C/C++之动态分配内存 c语言中,一般决定了变量的类型,就自动给决定了其作用域和存储时期,系统会自动给每个变量分配内存,在变量超出作用域和存储时期后,自动释放该变量所占用的内存. 除了自动分配内存, ...
- 二维数组动态分配内存
二维数组动态分配内存 C 二维数组动态分配和释放 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char ...
- 静态分配内存和动态分配内存
首先,在使用动态分配内存技术前,必须明白自己在做什么,这样做与其它的方法有什么不同,特别是会产生哪些负面影响,天下没有免费的午餐.动态分配内存与静态分配内存的区别: 1) 静态内存分配是在编译时完成的 ...
- CC++动态分配内存(手动分配内存)三种方式
1. malloc函数 函数原型:void *malloc(unsigned int size) 函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以 ...
- c语言分配内存空间方法,C语言之动态分配内存空间
动态分配内存 为什么需要动态分配内存: 1.存储的数据 需要延长生命周期 2.一个指针变量需要存储数据,变量本身只能存地址,不能存数据,需要分配内存空间来存储数据 #include #include ...
- C 结构体嵌套一级指针 二级指针 动态分配内存
https://blog.csdn.net/xielinhua88/article/details/51364623 点击打开链接 #define _CRT_SECURE_NO_WARNINGS #i ...
- hyperv动态内存Linux,Linux 之动态分配内存方式
(1)malloc/free 函数 malloc()函数和free()函数是在堆中申请或释放内存空间的,其函数声明如下: #include extern void* malloc(size_t _si ...
- (篇二)C语言动态分配内存、计算π的值
文章目录 一.动态分配内存 二.猴子吃桃问题 三.两种计算π的值 四.计算指定年月有几天 本篇是接着分享一些有趣的C语言实例,其实学习C语言这类结构化语言是非常锻炼逻辑思维的,也可以让我们对编程语言有 ...
- C++走向远洋——43(人数不定的工资类,动态分配内存与释放)
*/* Copyright (c) 2016,烟台大学计算机与控制工程学院* All rights reserved.* 文件名:text.cpp* 作者:常轩* 微信公众号:Worldhello* ...
最新文章
- 洛谷P4609 [FJOI2016]建筑师 【第一类斯特林数】
- CodeIgniter开发实际案例-新闻网站【转】
- codeforces round 418 div2 补题 CF 814 A-E
- 段寄存器和8种地址寻址方式
- Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
- 【Ids4实战】分模块保护资源API
- 前端开发 跨平台的构架GSOAP
- SQLSERVER2005 收缩日志
- hutool的定时任务不支持依赖注入怎么办_可调度定时任务在SpringBoot中的实践
- 从文件中读取并进行树的存储_数据库中的面试题你能接几招
- 测试用例报告——模板
- 原生js获取屏幕高度
- stlink固件版本低,但升级失败的解决办法
- linux ap 模式,无线AP是什么,客户端模式(apclient)是什么意思?
- 灯的开关状态 :有 N 个灯放在一排,从 1 到 N 依次顺序编号。有 N 个人也从 	1 到 N 依次编号。1 号将灯 全部关闭,2 将凡是 2 的倍数的灯 	打开;3 号将凡是 3 的倍数的灯作相
- KEAZ128 时钟配置
- IDEA 一直卡在Buil(编译 write classes)报错资源不足
- H5跳转小程序页面/wx-open-launch-weapp/
- 数据挖掘进行数据分析常用的方法
- DOS命令CD D:\ 不管用,怎么进入D盘
热门文章
- linux sparse 内核代码静态检查
- linux 源码编译upx 压缩软件
- VS不能编译指定版本(配置管理错误)
- Linux缓冲区溢出问题
- 系统架构领域的一些学习材料
- mysql 操作审计_利用mysql的audit审计功能记录用户操作信息
- mysql serial_mysql – 我应该对表id列使用数据类型SERIAL吗?
- protoc-3.2.0-win32转java文件
- 2018年计算机应用基础作业,2018年计算机应用基础作业二答案.doc
- 右边补0 润乾报表_制作按奖金分段统计的员工业绩报表