游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: funcman

new char[0]是什么?

[复制链接]

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
 楼主| 发表于 2007-10-25 15:21:00 | 显示全部楼层

Re:new char[0]是什么?

这样啊,3Q~

2

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
QQ
发表于 2007-10-26 14:11:00 | 显示全部楼层

Re:new char[0]是什么?

还是没见到底有什么实际的应用?谁给个例子!

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-26 20:34:00 | 显示全部楼层

Re: Re:new char[0]是什么?

zgpGame: Re:new char[0]是什么?

当分配0字节内存时,C++会按分配1字节处理
当你学习operator new关于重载new时,就会知道了, 这时一个C++标准


那么
char *p = new char[0];
后,
p实际上是指向一个字节的内存的,
是不是可以访问p[0]了?

6

主题

65

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2007-10-27 13:21:00 | 显示全部楼层

Re:new char[0]是什么?

我自己试了一下,下面是实验过程和结果
#include <iostream>
using namespace std;

void main()
{
        char *p = new char[0];
       
        //用p读取p后面的内存没问题,但读出来的结果没有意义
        cout << "the address pointed by p is " << (void *)p << endl;
        cout << "p[0] is " <<p[0]<<endl;
        cout << "p[1] is " <<p[1] << endl;
        cout << "... ..." << endl;
        cout << "p[50] is " <<p[50] << endl;
        cout << "... ..." << endl;
        cout << "p[100] is " <<p[100] <<endl;
        //多于5103就不行了。
        cout << "p[5103] is " << p[5103] <<endl;
       
        //用p也可以写p后面的内存,但释放p时就会出问题
        //p[0] = 'a';
        //cout << "after assign, it is " <<p[0] <<endl;
        delete [] p;

        char *p1 = new char[10];
        cout << "the address pointed by p1 is "<<(void *)p1 <<endl;
        cout << "p1[10] is " << p1[10] <<endl;
        //多于4991就不行了。
        cout << "p1[4991] is "<<p1[4991] <<endl;
        delete [] p1;
       
        return;
}

/*=====================结果分析===========================
the address pointed by p is 00371C10
p[0] is
p[1] is
... ...
p[50] is
... ...
p[100] is
p[5103] is

the address pointed by p1 is 00371C80
p1[10] is
p1[4991] is

分析:
00371C10偏移5104个字节的地址是00373000
00371C80偏移4992个字节的地址也是00373000
看来00373000之后是不能访问的空间,可能是别的进程的地址空间
那么可以得出结论:
------------------------------------------------------
通过一个有效的指针可以访问该指针后面进程允许访问的空间
不管后面的空间是否已经分配。
------------------------------------------------------
=========================================================*/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-15 13:34

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表