soword科技言
永久公益免费API接口
提供永久免费的API接口,查看更多API接口,如果您有其他免费API资源,请联系我们,造福人类。
提供商务开发:小程序,系统,APP
定制开发,免费评估,免费咨询,价格便宜,售后保障,前往开发服务中心联系开发客服中心
C ++修改使用堆栈参数构造的对象数据

伙计们,我似乎无法对存储在向量中的容器对象成员进行简单的修改。该成员本身就是一个对象。容器及其成员都分配在堆栈上。我认为这是在分配新设备时尝试取消分配设备原始名称的堆栈变量。

请给我一个线索,说明如何解决此问题,同时将变量分配在堆栈上。

class Device{
public:
Device(string name):m_name(name)
{}
string getName(){
return m_name;
}
string setName(stringnewName){
m_name = newName;
}

private:
string m_name;
 };

然后有一个包含设备的服务器:

class Server{
public:
Device & getDevice(int i)
{
return devices.at(i);
}
void addDevice(Device && dev)
{
devices.push_back(dev);
}
private:
vector<Device> devices;};

这是我的测试方式:

int main(){
Server s{};

s.addDevice(Device{"ONE"});
s.addDevice(Device{"TWO"});
s.addDevice(Device{"THREE"});

cout<<s.getDevice(0).getName()<<endl;
s.getDevice(0).setName("XXX");
cout<<s.getDevice(0).getName()<<endl;
return 0;}

我要出去的是:

ONE 
*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000617c20 *** Aborted (core dumped)

您需要修复setName方法,不返回任何内容,并标记为返回字符串。

string setName(stringnewName){
 m_name = newName;
 return m_name; //this is missing in the original code}



2023-03-22 10:04:19

新人小程序+APP定制199元起


发放福利,助力中小企业发展,真正在互联网中受益

点击询问定制

广告服务展示