全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅谈在函数中返回动态的内存

1、有以下题目:

#include <iostream>
using namespace std;

void GetMemeory(char* p)
{
  p=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

我们期望的输出是:ThunderDownloader

然而当我们运行此段代码的时候发现,程序崩溃了。

其实我们深入分析下不难发现,当我们传入str到GetMemeory()函数中的时候,该函数我们创建了一个临时

的指针变量片p,然后将其指向NULL。然后我们为临时指针变量p动态分配内存,注意,当我们在返回的时候

整个临时指针变量是释放掉的,因为其内存是在栈内存中分配的。但是我们之前传入的str的内存地址与临时变量

的内存地址是不相同的。所以此时str不能获取在函数GetMemmory分配的内存,因此后面的字符串复制和链接操作

都将造成程序崩溃。

我们可以用下面的图形更加生动的这一过程:

:

假设str本身内存为0x123 临时指针变量p的内存为0x456 动态分配的内存起始地址为0x789

当GetMemory函数结束的时候p被释放,而再也无指针指向这块动态分配的内存了。另外str也不可能

获取这段动态分配的内存的地址。所以也造成了内存泄露。

我们可以用如下两种方法解决这一问题:

一种是二级指针:

#include <iostream>
using namespace std;

void GetMemeory(char** p)
{
  (*p)=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(&str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

运行截图为:

关于二级指针的方法可以参考如下的流程图:

一种是指针的引用方法:

#include <iostream>
using namespace std;

void GetMemeory(char*& p)
{
  p=(char*)malloc(sizeof(char)*100);
}

int main()
{
  char *str=NULL;
  GetMemeory(str);
  strcpy(str,"Thunder");
  strcat(str,"Downloader");
  printf(str);
  system("pause");
  return 0;
}

运行截图:

关于指针引用方法的流程图如下:

能力有限,难免有没说清楚的地方,还望包涵。

以上就是小编为大家带来的浅谈在函数中返回动态的内存全部内容了,希望大家多多支持~


# 函数返回动态内存  # 当我们  # 这一  # 动态分配  # 可以用  # 是在  # 两种  # 将其  # 这段  # 都将  # 造成了  # 这块  # 没说  # 浅谈  # 也不可能  # 小编  # 大家多多  # 还望  # 存了  # 崩溃了  # int 


相关文章: 企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  TestNG的testng.xml配置文件怎么写  微信h5制作网站有哪些,免费微信H5页面制作工具?  Python文件管理规范_工程实践说明【指导】  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  活动邀请函制作网站有哪些,活动邀请函文案?  建站org新手必看:2024最新搭建流程与模板选择技巧  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何选择高效便捷的WAP商城建站系统?  C++时间戳转换成日期时间的步骤和示例代码  简单实现Android验证码  已有域名和空间,如何快速搭建网站?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  c# 在ASP.NET Core中管理和取消后台任务  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  建站之星如何快速更换网站模板?  清除minerd进程的简单方法  北京网站制作公司哪家好一点,北京租房网站有哪些?  在线制作视频网站免费,都有哪些好的动漫网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何构建满足综合性能需求的优质建站方案?  网页设计网站制作软件,microsoft office哪个可以创建网页?  建站之星安装后如何配置SEO及设计样式?  湖北网站制作公司有哪些,湖北清能集团官网?  建站主机数据库如何配置才能提升网站性能?  宁波免费建站如何选择可靠模板与平台?  建站之星北京办公室:智能建站系统与小程序生成方案解析  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  行程制作网站有哪些,第三方机票电子行程单怎么开?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  建站之星导航配置指南:自助建站与SEO优化全解析  建站上市公司网站建设方案与SEO优化服务定制指南  建站之星×万网:智能建站系统+自助建站平台一键生成  如何通过FTP服务器快速搭建网站?  如何选择适合PHP云建站的开源框架?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何用wdcp快速搭建高效网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  网站app免费制作软件,能免费看各大网站视频的手机app?  存储型VPS适合搭建中小型网站吗?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  香港服务器WordPress建站指南:SEO优化与高效部署策略  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  建站之星会员如何解锁更多建站功能?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  建站之星伪静态规则如何设置?  如何在云指建站中生成FTP站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。