猿问

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

溢出在隐式恒转换,有两个指针,连续分配,警告显示给第二个分配空间的指针
dev_name = new char(20); 
RecvDataBuffer = new char(1024); 
这是什么原因啊,怎么修改?

呼啦一阵风
浏览 332回答 3
3回答

翻阅古今

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

达令说

应该改成这样: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大多了,当然溢出了!

慕桂英546537

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