繁体   English   中英

C ++:总线错误:在方法中传递赋值字符串时为10

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM