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

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();

解释下异同..
...全文
77 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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;
}

65,187

社区成员

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

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