C++: ошибка шины: 10 при назначении строки в метод
Я пытаюсь назначить 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
1 ответ
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;
}