C++11 C++;:总线错误:在方法中传递赋值字符串时为10
我试图分配一个C++11 C++;:总线错误:在方法中传递赋值字符串时为10,c++11,bus-error,C++11,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){
字符串
,当我遇到此错误时,该字符串的值被传递到方法中:
总线错误: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++中使用<代码>新< /C> >,它分配内存并调用构造函数:
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;
}
std::unique_ptr init_user(常量字符串和用户名、常量字符串和密码){
std::unique_ptr u(新用户);
u->username=用户名;
u->password=密码;
返回u;
}
malloc
不调用构造函数,因此指定给它的字符串无效,因此SIGBUS
C++中使用<代码>新< /C> >,它分配内存并调用构造函数:
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;
}
std::unique_ptr init_user(常量字符串和用户名、常量字符串和密码){
std::unique_ptr u(新用户);
u->username=用户名;
u->password=密码;
返回u;
}
不要使用malloc()
为具有非平凡构造函数/析构函数的任何成员(例如std::string
)的类型分配。这种行为是不明确的。@Peter谢谢。问题已经解决,请不要使用malloc()
来分配具有非平凡构造函数/析构函数的任何成员(例如std::string
)的类型。这种行为是不明确的。@Peter谢谢。问题已经解决了