社区
C++ Builder
帖子详情
char * a = new char[8]分配几个字节的空间?我有两个你绝对想不到的答案!
acneyouth
2004-08-11 04:36:41
正常情况下当然是8个字节了,但是,
如果你在project\option中选择code gard,同时勾选其下的4个选项,另外去掉build width runtime packages和use dinamic RTL选项,你将得到9个字节;
如果你将上述所有选项都勾选上,你将得到11个字节!
这是不是个bug?害我耽误了两天时间,掉了几百根头发!
...全文
1268
40
打赏
收藏
char * a = new char[8]分配几个字节的空间?我有两个你绝对想不到的答案!
正常情况下当然是8个字节了,但是, 如果你在project\option中选择code gard,同时勾选其下的4个选项,另外去掉build width runtime packages和use dinamic RTL选项,你将得到9个字节; 如果你将上述所有选项都勾选上,你将得到11个字节! 这是不是个bug?害我耽误了两天时间,掉了几百根头发!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
40 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
acneyouth
2004-08-12
打赏
举报
回复
看来是我写程序不严谨,又受了inspect的误导,接受大家的教育!
老实说,我没扎实学过C,一直是在实践中自学来的。有时候写错了,但碰巧没报错,就当成定式记下来了,这才会有这样的错误。
这个问题的起因是我定义了这样的宏:
#define MacroNew(a,len) char * a = new char[len+1] ;memset(a,0,len+1) ;
但在使用中发现调用宏时,程序会失去响应,于是一步一步产生这样的疑惑。
这个宏为什么导致问题现在我也没想通,不过先结贴了,不然要打起来。
pcyy
2004-08-12
打赏
举报
回复
:) 凑个热闹
kpzh
2004-08-12
打赏
举报
回复
虽然结贴了
可是我还有点想法
我觉得是分配了10个字节
理由:char的8个字节+指针a的2个字节=10个字节
BCB
2004-08-11
打赏
举报
回复
:) 凑个热闹
myy
2004-08-11
打赏
举报
回复
BCB 老大啊,难得一见,难得一见...
BCB
2004-08-11
打赏
举报
回复
主要问题是:C跟PASCAL或DELPHI不一样,
不进行数组的越界检查,好处是灵活,效率高,
后者,随时都要检查操作数组是否越界。
BCB
2004-08-11
打赏
举报
回复
如此简单的问题,还掉了一把头发,
楼主钻进牛角尖。
kmfangxun
2004-08-11
打赏
举报
回复
To: Big_foolcat
我不想吵架,不过你动不动就用
----------------------------
唉~~~~这都是些什么人呀
让无知的人继续无知下去吧。
-----------------------------
这类言语讲话,实在让人受不了,即使你很牛B,也没必要,对吧!
TO:ALL
不好意思,SORRY!
zihan
2004-08-11
打赏
举报
回复
我们都是搞程序的,文明人嘛,别说胀话就好了.
别为了争问题伤了和气哦.....
myy
2004-08-11
打赏
举报
回复
不同意 kmfangxun() ,
“存放NULL的最后一位”也是属于 new 的大小之内的,new 多少就是多少,
你非要越界程序可能不会报错,但肯定是不对的。
一般,打算存放 Length 长度的字符串(不含结尾'\0'),
应该 new char[Length+1],最后一位手工赋为'\0' 。
kmfangxun
2004-08-11
打赏
举报
回复
To: Big_foolcat
看你那出言不狲的吊样,操你妈!
kmfangxun
2004-08-11
打赏
举报
回复
让无知的人继续无知下去吧。
=========================
既然你这样说,我也就不客气了,你懂多少?sb,nmb!
Big_foolcat
2004-08-11
打赏
举报
回复
让无知的人继续无知下去吧。
kmfangxun
2004-08-11
打赏
举报
回复
To: Big_foolcat
谁让你那么用的:
char * a = new char [1];
a[0] = 'a';
a[1] = '\0'; // 最后一位是用来存放NULL的,怎么是误导别人?
delete [] a;
Big_foolcat
2004-08-11
打赏
举报
回复
To: kmfangxun
char * a = new char [1];
a[0] = 'a';
a[1] = 'b'; // 你没发现这已经越界了吗?不要训导群众好不好
delete [] a;
kmfangxun
2004-08-11
打赏
举报
回复
唉~~~~这都是些什么人呀
========================
喂,别这样说好吧,你说我是什么人?
char * a = new char [1]; 就是分配了2Byte,怎么了?
Big_foolcat
2004-08-11
打赏
举报
回复
To: kmfangxun
按你这么说 char * a = new char [1]; //分配了2Byte???
唉~~~~这都是些什么人呀
kmfangxun
2004-08-11
打赏
举报
回复
我始终认为 char * a = new char[8]申请了9个字节(0-8).
geochway
2004-08-11
打赏
举报
回复
建议看看WINDOWS有关内存管理的资料,你就会明白了.
geochway
2004-08-11
打赏
举报
回复
(1)楼主的问题本身就是个问题,系统到底给你分配了多少空间,
事实上只有操作系统知道,应用程序本身并不知道,这本身
就是操作系统分配内存的原则,不会少分给你,可能会多分
给你,但你不能用,你不能去冒这个风险. 不知9,11是怎么出来的?
(2)事实上,操作系统在分配内存时,它有它的规则,至少在WIN32
系统中,它分配的指针会对齐在4字节上,假设你中申请分配1个字节,
事实上你至少可以得到4个字节的空间,因为后面3个字节空间事实上
它已经同时分配给你了.
加载更多回复(20)
c语言中
char
*name 与
char
name 的区别
要点:
char
* name="abc"指的是常量字符串,不可以修改指针,是兼容老的写法;
char
[] name="abc"是指针,可以修改;在学习过程中发现了一个以前一直默认的错误,同样
char
*c = "abc"和
char
c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。程序演示:测试环境Devc++代码 #include <stdio.h>#include &l...
char
*name 与
char
name[]的区别
VC中
char
*name 与
char
name[]的区别(基础知识) 要点:
char
* name="abc"指的是常量字符串,不可以修改指针,是兼容老的写法;
char
[] name="abc"是指针,可以修改; 在学习过程中发现了一个以前一直默认的错误,同样
char
*c = "abc"和
char
c[]="abc",前者改变其内容程序是会崩溃的,而后者完全正确。 程序演示:
【C++】C++常见面试题汇总_持续更新中...
1:指针(*)、引用(&)、解引用(*)、取地址(&)、的概念和区别 概念: 指针指向一块内存,指针保存的是内存的地址;引用是变量的别名,本质是引用该变量的地址。 解引用是取指针指向的地址的内容,取地址是获得变量在内存中的地址。 我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。 区别: (1)引用使
C++内存管理(建议收藏)
内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处...
c++中指针,堆栈内存
分配
重要概念理解汇总(实例注释)
c++
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章