我正在尝试分配一个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
答案 0 :(得分:3)
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;
}