当我尝试将char *数据从一个结构复制到另一个结构时,我遇到了问题。这是结构
struct connection_details
{
char *server;
char *user;
char *password;
char *database;
};
基本上我要做的是将数据从一个对象复制到另一个对象(connection_setup是一个私有的connection_details对象)这是来自另一个对象的构造函数的代码:
settings *tmp = new settings();
this->connection_setup.server = strdup(tmp->getSQLSettings().server);
delete tmp;
我不断得到分段错误,这是可以理解的,因为我可能触及了我不应该做的事情。
基本上,我所在的设置对象和对象都包含connection_details类型的私有成员变量。即
class settings {
public:
settings();
~settings();
connection_details getSQLSettings();
private:
connection_details sqldetails;
};
感谢您的任何建议!
答案 0 :(得分:2)
首先,您正在使用新的和免费的。这是一个非常糟糕的主意,因为一般情况下不会调用析构函数。你应该用删除替换free。
此外,你获得了strdup返回值的所有权,但是你没有把它释放到任何地方,但希望这是在未示出的代码中的某个地方完成的。
这里的问题似乎是为了返回get sql方法而复制了指针,所以现在你有两个指针指向同一个指针。
这是一个问题,因为当第一个被破坏时,它也会在你的析构函数中破坏指针,当第二个运行时,你将试图删除一个悬空指针...这可能是导致你的崩溃。
有几种方法可以解决这个问题: