为了账号安全,请及时绑定邮箱和手机立即绑定

请问在C++构造函数中 如何给类中public作用域下的指针分配空间?如下情况!

请问在C++构造函数中 如何给类中public作用域下的指针分配空间?如下情况!

C++ C
呼啦一阵风 2021-11-03 20:07:49
溢出在隐式恒转换,有两个指针,连续分配,警告显示给第二个分配空间的指针dev_name = new char(20); RecvDataBuffer = new char(1024); 这是什么原因啊,怎么修改?
查看完整描述

3 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

new char(1024); 括号中的值太大了,超过char定义的范围,结果是无定义的(由实现定义),所以编译器给出了一个警告,这个算是类型方面的小小错误。
VC系列:
char : -128 ~ 127
unsigned char : 0 ~ 255
signed char: -128 ~ 127
把括号中的值该到范围内(-128 ~ 127)就可以了。
看看下面这个:
unsigned char p = 257; // p 等于多少????
signed char p = 128; // p等于多少???

查看完整回答
反对 回复 2021-11-07
?
达令说

TA贡献1821条经验 获得超6个赞

应该改成这样:
dev_name = new char[20];
RecvDataBuffer = new char[1024];
括号用错了,
dev_name = new char(20);
分配一个字节 ,没有问题,分配同时初始化 *dev_name= 20,在 0~255 或 -128~127 之间。
RecvDataBuffer = new char(1024);
分配一个字节 ,分配同时初始化 *RecvDataBuffer = 1024,问题来了,不在在 0~255 或 -128~127 之间
overflow in implicit constant conversion
溢出在隐式常量转换
看1024 比127 或255大多了,当然溢出了!



查看完整回答
反对 回复 2021-11-07
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

你的程序用new是分配一个字符呢还是分配一段连续的空间?这个问题你没有明确,如果是分配一个字符的话,第二个有问题,你括号里面的是整型值,而char的范围最大都只能取到255,而1024,明显溢出了,所以编译会出问题,如果是分配数组的话,应该是new 元素类型[分配的大小],不是你所用的括号

查看完整回答
反对 回复 2021-11-07
  • 3 回答
  • 0 关注
  • 331 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信