全网整合营销服务商

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

免费咨询热线: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 


相关文章: 实现点击下箭头变上箭头来回切换的两种方法【推荐】  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站之星CMS五站合一模板配置与SEO优化指南  如何用wdcp快速搭建高效网站?  如何通过虚拟主机快速完成网站搭建?  Python如何创建带属性的XML节点  音乐网站服务器如何优化API响应速度?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何快速登录WAP自助建站平台?  常州企业建站如何选择最佳模板?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  如何快速生成专业多端适配建站电话?  C#怎么使用委托和事件 C# delegate与event编程方法  IOS倒计时设置UIButton标题title的抖动问题  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  深圳网站制作案例,网页的相关名词有哪些?  定制建站方案优化指南:企业官网开发与建站费用解析  如何在云服务器上快速搭建个人网站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何快速打造个性化非模板自助建站?  高防服务器租用如何选择配置与防御等级?  如何在云指建站中生成FTP站点?  如何在云主机快速搭建网站站点?  建站之星收费标准详解:套餐费用及年费价格表一览  成都网站制作报价公司,成都工业用气开户费用?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何在云主机上快速搭建网站?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何用景安虚拟主机手机版绑定域名建站?  如何用已有域名快速搭建网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  孙琪峥织梦建站教程如何优化数据库安全?  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  如何在建站主机中优化服务器配置?  如何登录建站主机?访问步骤全解析  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  网站制作员失业,怎样查看自己网站的注册者?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  已有域名和空间如何快速搭建网站?  seo网站制作优化,网站SEO优化步骤有哪些?  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何在腾讯云服务器快速搭建个人网站?  建站之星代理如何优化在线客服效率?  如何快速上传建站程序避免常见错误?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄? 

您的项目需求

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