C++ 越界问题

malone1 2011-08-19 10:15:24
struct A
{
int m_b;
int m_c;
}

char * buf= new char;

A * Aptr= (A *)buf;
Aptr->m_b=4;
Aptr->m_c=5;
这样程序虽然可以运行,但是存在越界问题?
...全文
223 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
malone1 2011-09-05
  • 打赏
  • 举报
回复
Abel Lee 2011-08-19
  • 打赏
  • 举报
回复
轻则程序崩溃,重则系统崩溃,永远记住不要对你不可用的内存赋值!!!
野男孩 2011-08-19
  • 打赏
  • 举报
回复
错误就是错误,没表现出来,那也是错误。别玩火~~
pathuang68 2011-08-19
  • 打赏
  • 举报
回复
buf除了第一个char是可以确定的外,其后的内容皆不能确定。

C和C++给了程序员很多自由,但自由也同时意味着责任。
jernymy 2011-08-19
  • 打赏
  • 举报
回复
等着崩溃吧
turing-complete 2011-08-19
  • 打赏
  • 举报
回复
显然越界了,你是想验证错误,但是没有得到错误吧。 呵呵,这种错误才是最厉害的错误。
品茶 2011-08-19
  • 打赏
  • 举报
回复
等着崩溃吧
至善者善之敌 2011-08-19
  • 打赏
  • 举报
回复
拉登来了。。。

小庙拜大神
一叶之舟 2011-08-19
  • 打赏
  • 举报
回复
当然了,A占8个字节,new char;只分配了一个字节,肯定会越界。
可以这样做:
char * buf= new char[sizeof(A)];

A * Aptr= (A *)buf;
Aptr->m_b=4;
Aptr->m_c=5;
xiaoguangzaia 2011-08-19
  • 打赏
  • 举报
回复
只申请了sizeof(char)大小的内存
实际操作了sizeof(A)大小
gykgod 2011-08-19
  • 打赏
  • 举报
回复
LZ 您是对的

可能会写非法内存

buf只有一个字节是合法的 往这个字节后面再写就写到别人那里了 覆盖了别的数据
  • 打赏
  • 举报
回复
是,越界了
后果未知
再次启程 2011-08-19
  • 打赏
  • 举报
回复
越界了,这样可能无意中修改了某些未知的量,造成不可预测的后果
Saingel 2011-08-19
  • 打赏
  • 举报
回复
既然LZ这样写,那个性到底
char * buf= new char[sizeof(A)];
v_table 2011-08-19
  • 打赏
  • 举报
回复
c++让您这么用,斯特鲁普情何以堪。。
kkrmr 2011-08-19
  • 打赏
  • 举报
回复
有用。。

64,637

社区成员

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

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