问个内存的基本问题,有兴趣的朋友来看看。

gl615 2009-01-07 03:04:53


char* f1()
{
char a[]="123456";
return a;//被认为是返回栈内存,会警告,甚至错误
}

char* f2()
{
char* a="123456";
return a;//被认为是返回常量字符串,ok
}

void f_1(char*& a,int num)
{
a=new char[num];//函数结束,申请内存失败
}

char* f_2(int num)
{
char* a=new char[num];//申请内存成功
return a;
}




f1()与f2();
f_1()与f_2();

解释下异同..
...全文
69 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd1025 2009-01-07
  • 打赏
  • 举报
回复
char* f1()
{
char a[]="123456";
return a;//被认为是返回栈内存,是局部变量,函数结束局部变量回收
}
char* f2()
{
char* a="123456";
return a;//被认为是返回常量字符串,是在全局内存数据区中,生命期对应整个工程,相当于全局变量
//函数结束内存不被回收仍然有效
}
void f_1(char*& a,int num)
{
a=new char[num];//函数结束,申请内存失败
// 这个我在VC6.0下验正没有失败啊!a是char*型指针的引用与f_2作用等同


#include <stdio.h>
void f_1(char*& a,int num)
{
a=new char[num];
}
void main()
{
char *a;
f_1(a,5);
a="abcd";
printf(a); //正确输出abcd
}

char* f_2(int num)
{
char* a=new char[num];//申请内存成功 开辟了一个全局堆中内存new成功就没有问题。
return a;
}


shilei_815 2009-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hqin6 的回复:]
char* f1()
{
char a[]="123456";
return a;//被认为是返回栈内存,会警告,甚至错误
}
局部变量在函数退出时销毁,返回后的指针指向的数据不可知,错误
char* f2()
{
char* a="123456";
return a;//被认为是返回常量字符串,ok
}
局部指针a指向常量存储区中的“123456”,函数返回指针副本,指向常量存储区,ok

void f_1(char*& a,int num)
{
a=new char[num];//函数结束,申请内存失败
}
应该没问题,堆中分配空间
char* f_2(int num)
{
char* a=new char[num];//申请内存成功
return a;
}
堆中分配空间,函数退出依然有效,直到delete释放
[/Quote]
up!
xiaoyisnail 2009-01-07
  • 打赏
  • 举报
回复
char* f1()
{
char a[]="123456";
return a;//被认为是返回栈内存,会警告,甚至错误
}
局部变量在函数退出时销毁,返回后的指针指向的数据不可知,错误
char* f2()
{
char* a="123456";
return a;//被认为是返回常量字符串,ok
}
局部指针a指向常量存储区中的“123456”,函数返回指针副本,指向常量存储区,ok

void f_1(char*& a,int num)
{
a=new char[num];//函数结束,申请内存失败
}
应该没问题,堆中分配空间
char* f_2(int num)
{
char* a=new char[num];//申请内存成功
return a;
}
堆中分配空间,函数退出依然有效,直到delete释放
太乙 2009-01-07
  • 打赏
  • 举报
回复

char* f1()
{
char a[]="123456";
return a;//被认为是返回栈内存,会警告,甚至错误----------确实是在栈空间,函数返回,栈空间释放,故会出错
}

char* f2()
{
char* a="123456";
return a;//被认为是返回常量字符串,ok---------a指向的空间在全局数据常量区。函数返回,空间不释放
}

void f_1(char*& a,int num)
{
a=new char[num];//函数结束,申请内存失败------------我感觉不会失败
}

char* f_2(int num)
{
char* a=new char[num];//申请内存成功------------这不解释了吧!
return a;
}

根据软件测试简历模板编写简历,让HR从万千简历中多看你一眼。通过测试基本功的指导,让面试官因你扎实的软件测试理论而留下深刻的印象。通过面试回答话术的指导,让你在面试时不卑不亢,从容应对,回答更具有专业性、积极性和逻辑性,机会永远都是留给有准备的人! 本课程提供的所有附件内容,建议大家下载,然后背诵下来,背诵后能够熟练的应用到各个测试场景中去。想要找到好工作,首先要自己下苦功夫。重要的事情说三遍:背诵附件内容、背诵附件内容、背诵附件内容 在知识学习的路上:愿你三冬暖,愿你春不寒,愿你天黑有灯,下雨有伞,愿你路上有良人相伴,愿你学得知识前路顺遂。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:软件测试简历1、软件测试简历模板【基本信息:基本资料+教育经历】【描述指导】2、软件测试简历模板【专业技能】【描述指导】3、软件测试简历模板-【工作经历】【描述指导】4、软件测试简历模板【项目经历-WEB端】【项目描述指导】5、软件测试简历模板-【项目经历-APP端】【项目描述指导】 第三章:软件测试基本功1、软件测试基本功【必背理论知识内容介绍】2、软件测试基本功【软件质量+功能性需求+非功能性需求】3、软件测试基本功【缺陷表现形式+缺陷处理流程+缺陷分析方式等】4、软件测试基本功【软件测试标准:测试目标、原则、结束标志等】5、软件测试基本功【功能测试内容:界面、数据、操作、逻辑、接口】6、软件测试基本功【测试用例:框架搭建、设计思想、影响因素等】7、软件测试基本功【软件测试5个阶段:单元-集成-系统-验收-回归】8、软件测试基本功【软件测试类型:黑盒、白盒、性能、负载等】9、软件测试基本功【软件测试活动生命周期】 第四章:软件测试面试话术1、软件测试面试回答话术【面试前的准备】2、软件测试面试回答话术【面试的态度】3、软件测试面试回答话术【自我介绍、离职原因、加班看法、还有什么问题要问我】4、软件测试面试回答话术-【工作流程-介绍XX项目如何测试和项目收获】【回答指导】5、软件测试面试回答话术-【工作流程-QA工作流程、公司项目工作流程、是否做过敏捷】【回答指导】6、软件测试面试回答话术-【面试过程的随机问题】【回答指导】

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧