[英]C++ : Bus Error: 10 when assign string passed in method
我正在尝试分配一个string
,当我遇到此错误时,该string
的值将传递到方法中:
Bus error: 10
我的代码:
struct user {
string username;
string password;
};
方法:
user *init_user(const string & username, const string & password){
user *u = (user *)malloc(sizeof(user));
if (u == NULL){
return NULL;
}
u->username = username;
u->password = password;
return u;
}
呼叫:
user *root = init_user("root", "root");
我认为错误是由
u->username = username;
u->password = password;
我正在使用的编译器是c++11
作业系统: MacOS
malloc
不调用构造函数,因此分配给您的字符串无效,因此为SIGBUS
。
在C ++中,使用new
,它将分配内存并为您调用构造函数:
user *init_user(const string & username, const string & password) {
user* u = new user;
u->username = username;
u->password = password;
return u;
}
工厂函数应该返回一个智能指针,例如std::unique_ptr
以传达所有权转移并防止内存泄漏:
std::unique_ptr<user> init_user(const string & username, const string & password) {
std::unique_ptr<user> u(new user);
u->username = username;
u->password = password;
return u;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.