伙计们,我似乎无法对存储在向量中的容器对象成员进行简单的修改。该成员本身就是一个对象。容器及其成员都分配在堆栈上。我认为这是在分配新设备时尝试取消分配设备原始名称的堆栈变量。
请给我一个线索,说明如何解决此问题,同时将变量分配在堆栈上。
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}