内存分配基本问题

lee0100317 2009-08-09 03:05:53
c++里面有些开辟的空间是不是不用你手动回收?我列出一些场合大家帮忙看看
int a[20];
int *a=new int [20];
string str="123";
string *buf;
buf=(string *)malloc (sizeof(str));
还有一种情况是buf=(char*)malloc(20);
buf[10]='\0';
这样是不是需要手动free 需要的话'\0'后的空间会正常释放?
还有我实例化类的话 CMYCLASS imyclass;和CMYCLASS *pimyclass =new CMYCLASS;这两种方式有什么差别,是不是new的话就一定要手动delete

还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
...全文
101 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
看看这个http://baike.baidu.com/view/1250144.htm

lee0100317 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tr0j4n 的回复:]
gb2312中汉字的编码和汉字的unicode的编码是不同的。
[/Quote]
能详细的介绍下吗? 非unicode模式编程的时候 我取出2个字节肯定是一个汉字了,但这两个字节会是什么呢?
jingzhongrong 2009-08-09
  • 打赏
  • 举报
回复
1、new对应delete,malloc对应free,如果new的空间不释放,在程序退出时由操作系统回收。
2、int a[20];存放在栈上,在退出变量作用范围后被自动释放。
3、string str="123"; 使用的是string的构造函数,内存由string类管理,不需要自己释放。
4、\0只是C、C++中字符串结束的标志,与需不需要手动释放内存没有关系。
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。高位在前

UTF的字节序由BOM决定,LZ的概念很混杂!

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
  在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
  这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
gamedragon 2009-08-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 lee0100317 的回复:]
还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
[/Quote]
第一个,不是,而且即使有'\0'也不一定是结尾。如果用string::c_str(),会在后面加个'\0',然后把指针返回。
第二个,没人规定unicode存储是大头或小头,当然用x86肯定都是小头。
第三个,不一样,两者之间基本没有关系。
MoXiaoRab 2009-08-09
  • 打赏
  • 举报
回复
gb2312中汉字的编码和汉字的unicode的编码是不同的。
zhuzhenlei 2009-08-09
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20031127/16/2502200.html
雪影 2009-08-09
  • 打赏
  • 举报
回复
1.使用new或malloc申请的空间在堆区,一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
一把需要程序员自己释放,使用delete或free
2.其他的变量都在栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
3. stl::string结尾是以‘\0’结尾的

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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