gpt4 book ai didi

C++ 在类中设置字符串属性值抛出 "Access violation reading location"

转载 作者:搜寻专家 更新时间:2023-10-31 01:22:23 28 4
gpt4 key购买 nike

我在使用这个简单的代码时遇到了一些问题:

#pragma once
#include <iostream>
#include <string>
using std::string;

class UserController;
#include "UserController.h"
class CreateUserView
{
public:
CreateUserView(void);
~CreateUserView(void);
UserController* controller;
void showView();

string name;
string lastname;
string address;
string email;
string dateOfBirth;
};

我只需要在实现中使用 getline() 设置这些属性。

CreateUserView::CreateUserView(void)
{

}
void CreateUserView::showView()
{

cout << endl << " New User" << endl;
cout << "--------------------------" << endl;
cout << " Name\t\t: ";
getline(cin, name);

cout << " Lastname\t: ";
getline(cin, lastname);

cout << " Email\t\t: ";
getline(cin, email);


cout << " ===============================" << endl;
cout << " 1. SAVE 2.CHANGE 3.CANCEL" << endl;
cout << " ===============================" << endl;
cout << " choice: ";
int choice;
cin >> choice;
cin.ignore();

controller->createUser_choice(choice);
}

我一直在这一行收到这个“访问冲突读取位置”错误:

getline(cin, name);

为类的 std::string 属性赋值的最佳方式是什么?甚至 name = "whatever"也会抛出该错误!!

谢谢

编辑:UserController 正在实例化 CreateUserView:

CreateUserView *_createUserView;

这是如何实例化 CreateUserView 的:

void UserController::createUser()
{
//Init the Create User View
if(_createUserView == NULL)
{
_createUserView = new CreateUserView();
_createUserView->controller = this;
}
_createUserView->showView();
}

最佳答案

你似乎没有正确初始化你的变量:

CreateUserView *_createUserView;

因此它是一个悬挂指针,而不是NULL(在C++中,除了少数异常(exception),变量不会自动初始化为0)。所以在这里

if(_createUserView == NULL)
{
_createUserView = new CreateUserView();
_createUserView->controller = this;
}

if block 没有执行,这里

_createUserView->showView();

您遇到访问冲突。将指针正确初始化为 NULL:

CreateUserView *_createUserView = NULL;

关于C++ 在类中设置字符串属性值抛出 "Access violation reading location",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2905578/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com