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谢谢。问题已经解决了