如何处理访问写入冲突错误? [复制]
Posted
技术标签:
【中文标题】如何处理访问写入冲突错误? [复制]【英文标题】:How to deal with access writing violation error? [duplicate] 【发布时间】:2021-10-13 17:10:42 【问题描述】:我创建了一个小程序来试验链表。然而,当我运行它时,我在 jerry->age = 45 处得到一个“访问冲突写入位置”。我不确定我做错了什么。
#include <string>
#include <iostream>
using namespace std;
struct Person
string name;
int age;
char gender;
struct Person* contact;
;
int main()
struct Person* jerry = (struct Person*) malloc(sizeof(struct Person));
jerry->name = "Jerry";
jerry->age = 45;
jerry->gender = 'M';
jerry->contact = (struct Person*)malloc(sizeof(struct Person));;
printf("Hi! My name is %s.\n I am %d years old.\n I am ");
printf((jerry->gender == 'M') ? " a man.\n" : " a woman.\n", jerry->gender);
printf("I happen to know ");
编辑:
我的新代码如下:
#include <string>
#include <iostream>
using namespace std;
class Person
public:
Person(const string& name, int age, char gender, const Person* contact) : _name(name), _age(age), _gender(gender), _contact(contact)
public:
string getName()
return _name;
int getAge()
return _age;
char getGender()
return _gender;
private:
string _name;
int _age;
char _gender;
const Person* _contact;
/*Person* getPerson()
return _contact;
*/
;
int main()
Person jerry("Jerry", 45, 'M', nullptr);
Person simon("simon", 58, 'M', nullptr);
printf("Hi! My name is %s.\n I am %d years old.\n I am", jerry.getName(), jerry.getAge());
printf((jerry.getGender() == 'M') ? " a man.\n" : " a woman.\n", jerry.getGender());
printf("I happen to know ");
如何访问 Person 类中的指针联系人?
【问题讨论】:
哪个操作系统和平台? 如果是 c++ 为什么要使用 malloc ? 无法用 gcc 重现。至于你没有描述的问题,他第一个printf()
调用有未定义的行为,因为它包含两个格式说明符,但没有对应的参数。
我的猜测是 malloc 由于结构内的字符串而失败。最有可能的是,字符串在后台使用new
,而混合malloc
和new
是不好的。它在我的机器/在线编译器上崩溃。
【参考方案1】:
当您使用malloc
分配您的struct
时,您不会为std::string
运行ctor。
您应该为您的 struct
创建一个 ctor,在其中正确初始化字符串,并使用 ctor 而不是 malloc
创建对象(在创建指针时使用 new
和 delete
)。
定义类的代码示例:
class Person
public:
Person(const string& name, int age, char gender, const Person* contact) : _name(name), _age(age), _gender(gender), _contact(contact)
private:
string _name;
int _age;
char _gender;
const Person* _contact;
;
使用该类的代码示例:
Person jerry("Jerry", 45, 'M', nullptr);
Person jerry2("Jerry2", 45, 'M', &jerry);
Person* jerry3 = new Person("Jerry3", 45, 'M', &jerry);
delete jerry3;
contact
的指针用法可能不安全,应该更改。
【讨论】:
创建一个 ctor 没有帮助,它已经有一个合适的默认 ctor。问题是 malloc 不调用ctor。 正确,这还不够,您需要使用ctor而不是malloc
创建对象,并在答案中添加。
你能举一个这段代码的例子吗?
@Programmer - 添加示例以上是关于如何处理访问写入冲突错误? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何处理 https 连接被拒绝错误并将日志写入服务器
如何处理我在尝试通过 Pyspark 从 SQL 写入 Kudu 时遇到的这个错误