游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2519|回复: 9

指针问题

[复制链接]

15

主题

33

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2009-1-11 17:18:00 | 显示全部楼层 |阅读模式



int* arr = new int[0];

  delete [] arr;


请问arr分配内存了吗??

8

主题

99

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2009-1-19 20:17:00 | 显示全部楼层

Re:指针问题

当然分配了

21

主题

125

帖子

135

积分

注册会员

Rank: 2

积分
135
QQ
发表于 2009-2-2 16:42:00 | 显示全部楼层

Re:指针问题

不是 arr 分配内存了。
正确说法是:arr 只是指针,它指向了一个 new 开辟的内存空间头地址上。
举个反例:
unsigned long lpd = (unsigned long) new int;

这里的 new int[0]; 要看编译器是否允许。有些编译器不可以这样写,报告错误。
有一些编译器就会等价于 new int[0]; new int[1];
又有一些开辟了一个空的内存空间,有地址返回,但不可以存放数据

0

主题

4

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2009-2-3 20:36:00 | 显示全部楼层

Re: 指针问题

你如果能分清new int和new int[1]的区别,
你就知道arr是否分配内存了:)

3

主题

263

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2009-2-10 15:56:00 | 显示全部楼层

Re: 指针问题

貌似Effective C++上说,new 的时候,即使请求的内存size == 0,也会分配内存.
这好像是C++标准规定的.呵呵. [em2]

4

主题

81

帖子

81

积分

注册会员

Rank: 2

积分
81
发表于 2009-2-26 11:34:00 | 显示全部楼层

Re:指针问题

你这个属于动态分配空数组的问题

C++是不允许定义长度为 0 的数组变量的,但是用new创建长度为 0 的数组是合法的。
用new创建长度为 0 的数组时 new返回有效的非零指针 也就是指向分配的内存
但是不能对其进行解引用 因为没有指向任何元:-)

PS:不要忘了 delete

3

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2009-2-26 14:54:00 | 显示全部楼层

Re:指针问题

int* a;
a = new int [0];
*a = 1;

cout<<*a<<endl;

我刚刚试了这么一段代码。

输出结果为1。。。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-2-27 16:55:00 | 显示全部楼层

Re:指针问题

楼上的代码貌似越界访问了...

3

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2009-2-27 23:55:00 | 显示全部楼层

Re:指针问题

我也觉得他越界了。。。可结果是正确的。。。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2009-3-5 02:16:00 | 显示全部楼层

Re:指针问题

显示正确是正常的,不过等到它异常的时候你就可能找不到在哪发疯了 -_-#
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 05:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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