Я новичок в C++, и это код, где мой указатель становится нулевым, что я делаю неправильно?Указатель становится null C++
Основная функция.
// in main() function
switch (UserView::RequestMainMenuOption()) {
case 1:
{
struct user_info *user; // the pointer in question.
if (UserController::Login(user) && user) { // shows null here
std::cout << user->username << std::endl; // this line does not execute.
Контроллер.
bool UserController::Login(struct user_info *user)
{
//...
// std::cin username/password and validate in the user model.
if (User::ValidateCredentials(username, password, user)) {...}
}
Модель.
int User::ValidateCredentials(std::string username, std::string password, struct user_info *user)
{
// UserList is a vector of struct user_info that contains std::string username, password;
std::vector<user_info> UserList = User::GetUserList();
// index is searched for here based on credentials...
// address of the element in the user list is assigned to user.
user = &UserList.at(index);
// address is successfully assigned (tested)
// but when returning back to the first function call in the main() function, user is NULL.
Вы, вероятно, хотите, чтобы передать аргумент 'Логин()' по ссылке. –
Вы передаете 'user', всюду, по значению. Это означает, что установка 'user' внутри этой функции абсолютно не влияет. Вам нужно передать 'user' по ссылке вместо значения. Просмотрите материал в своей книге на C++, в котором говорится о передаче параметров функции по значению в сравнении с ссылкой. –
вы только объявляете 'struct user_info * user;' и не выделяете его, так что это NULL, но вам повезло, потому что, если вы не находились в режиме отладки, он мог содержать мусор и выполнять ваш код в виде мусора –