指针变为零C

Pointer becomes null c++

本文关键字:指针      更新时间:2023-10-16

我是C 的新手,这是我的指针变为null的代码,我在做什么错?

主要功能。

// 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. 

指针可能不会或可能不为null,但更重要的是,它是不法的:

struct user_info *user /* = ???? initialise here */; // the pointer in question.
if (UserController::Login(user) && user) { // shows null here
     std::cout << user->username << std::endl; // this line does not execute.

编辑以下内容以使其安全多亏了Quentin

这是因为您的编译器处于调试模式为null ..您想要:

 std::unique_ptr<user_info> user = std::make_unique<user_info)>(/* constructor arguments go here */);

或共享对象:

 std::shared_ptr<user_info> user = std::make_shared<user_info)>(/* constructor arguments go here */);