00_C++学习遇到的问题

C++学习遇到的问题

读取字符串的字符出错,内存访问失败

错误

运行报错0x00007FFE4B3513E7 (vcruntime140d.dll)处(位于 13_ClassesAndObjects.exe 中)引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

image-20230110113615536

调试报错读取字符串的字符出错内存访问失败

image-20230110114226315

报错代码:

#include<iostream>
using namespace std;
class Person {
public:
	//姓名设置可读可写
	void setName(string name) {
		uname = name;
	}
	string getName() {
		return uname;
	}
	//获取年龄
	int getAge() {
		return uage;
	}
	//设置年龄
	void setAge(int age) {
		if (age < 0 || age>150) {
			uage = 0;
			cout << "你个老妖精" << endl;
			return;
		}
		uage = age;
	}
	//情人设置可写
	void setLove(string love) {
		ulove = love;
	}
private:
	string uname;//可读可写 姓名
	int uage;//只读  年龄	//如果放在情人前面报错
	string ulove;//只写 情人
	//下面这个顺序不报错
	//string ulove;//只写 情人
	//int uage;//只读  年龄	//如果放在情人前面报错

	
};

void privateAttribute() {
  ///报错原因代码部分
	Person p;
	//姓名设置
	p.setName("张三");
	cout << "姓名:" << p.getName() << endl;
	//年龄设置
	p.setAge(21);
	cout << "年龄:" << p.getAge() << endl;
	//情人设置
	p.setLove("苍井空");
	//cout << "情人:" << p.ulove << endl;//只写属性,不可读取

}

错误原因

未使用显示的方式new对象导致对象调用malloc,分配内存后未调用构造函数初始化

详细原因:
使用结构体变量类型定义一个结构体时(Type a),因为工程环境或者其他原因导致编译器对该变量只使用malloc分配内存,没有调用相应的构造函数对内部的数据初始化,比如重要的指针数据,和基于指针的容器数据string或其他容器。

解决方法

​ 程序员需要显式的使用new构造对象(Type *a=new Type()),不管是结构体对象还是类对象,也就是用指针代替值对象。

注意点:
显式使用了new以后就需要用指针指向该内存,所以在使用对象时,为了避免出现意外的只有malloc没有构造的情况,需要使用指针替代值对象,传值的时候只需要将指针解引用就可以。

修改代码

void privateAttribute() {
	Person *p=new Person();
	//姓名设置
	p->setName("张三");
	cout << "姓名:" << p->getName() << endl;
	//年龄设置
	p->setAge(21);
	cout << "年龄:" << p->getAge() << endl;
	//情人设置
	p->setLove("苍井空");
	//cout << "情人:" << p->ulove << endl;//只写属性,不可读取

}

参考CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: c参考手册是一份关于C语言的指南手册,它包含了一系列关于不同版本C语言的详细说明和指导。 c98是C语言的一种早期标准,c03、c11、c14、c17和c20分别代表了C语言的不同版本。这些版本每一版都会有一些新的特性和改进,学习者可以根据自己所用的C语言版本查找相关的信息。 使用c参考手册,可以帮助开发者和学习者更好地理解、学习和使用C语言。手册会介绍C语言的语法、数据类型、运算符、控制结构、函数、库函数等主要知识点,并给出实例说明和详细的说明文档。 该参考手册是一个非常有用的工具,无论是初学者还是有经验的开发者都可以从获取到关键的信息。通过查阅手册,开发者能够解决问题、了解各种函数和语法的用法,并学习如何编写高效、可靠的C语言代码。 总之,c参考手册能够提供给C语言学习者和开发者所需的基本知识和技能,使他们在使用C语言进行编程时更加自信和熟练。无论是在学习、教学还是实际项目开发,c参考手册都是一个重要的资源。 ### 回答2: c参考手册是一种用于编程语言C的文档,它包含了不同版本的C语言的规范和特性。这些版本包括c98、c03、c11、c14、c17和c20。 C语言是一种通用的计算机编程语言,广泛用于系统级开发、嵌入式系统和高性能应用程序的编写。每个版本的C语言都有不同的规范和特性,为开发人员提供了不同的功能和工具。因此,每个版本都有相应的参考手册,供开发人员查询和使用。 参考手册通常包含了语法、数据类型、函数、库函数和常见编程技巧等方面的信息。它详细介绍了每个版本的C语言的特性和用法,供开发人员参考和使用。开发人员可以从参考手册找到特定版本的语言规范和相关的函数库,以便更好地进行编程和开发工作。 在进行C语言编程时,参考手册是非常重要的工具,可以帮助开发人员理解和掌握C语言的语法结构和用法。通过查阅参考手册,开发人员可以快速找到所需的信息,并解决编程遇到问题。 总之,对于学习和使用C语言开发人员来说,参考手册是必不可少的工具。它为不同版本的C语言提供了规范和特性的详细介绍,帮助开发人员更好地使用和理解C语言。无论是初学者还是有经验的开发人员,都可以从参考手册获得很多有价值的信息。 ### 回答3: c 参考手册是一本电子文档,包含了关于C语言编程的详细参考信息。它是以CHM格式进行存储的,包含了C 98、C 03、C 11、C 14、C 17和C 20的参考说明书。CHM是一种Microsoft Windows帮助格式,可以方便地浏览和查阅。 C语言是一种广泛应用于编程领域的高级编程语言,具有简洁、高效和强大的特点。C 98是C语言的第一个标准,C 03、C 11、C 14、C 17和C 20是后续版本的标准,它们在语法和功能上有一些差异。 在c 参考手册,我们可以找到关于C语言语法、变量、数据类型、运算符、流控制、函数、指针、数组、结构体、文件理等方面的详细说明和示例代码。这些信息帮助程序员更好地了解和掌握C语言的特性和用法。 通过c 参考手册,我们可以详细了解C 98、C 03、C 11、C 14、C 17和C 20版本的差异和新增功能。这有助于程序员根据自己的需求选择合适的C语言版本,并正确地使用新的语言特性。 总之,c 参考手册是C语言程序员的重要工具,它提供了关于C语言的详尽参考信息,帮助程序员解决问题和提高编程技能。对于学习和掌握C语言的人来说,它是一个不可或缺的资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值