|
求助各位大佬,我按视频上敲的代码为什么会出现这种错误:
0x5716F6E0 (ucrtbased.dll)处(位于 test_8.7.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突。
是我的vs2017有问题吗?
代码:
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
char*pname;
char sex;
int age;
int num;
Student() {};
Student(char *t_name, char t_sex, int t_age, int t_num);
~Student();
Student& operator= (const Student& zhangsan);
};
Student::Student(char *t_name, char t_sex, int t_age, int t_num) :sex(t_sex), age(t_age), num(t_num)
{
int n_len = 0;
char *pname = NULL;
n_len = strlen(t_name) + 1;
pname = new char[n_len];
memset(pname, 0, n_len);
strcpy(pname, t_name);
}
Student::~Student()
{
if (pname)
{
delete[]pname;
*pname = NULL;
}
cout << "~Student+++++++++++++" << endl;
}
Student &Student::operator= (const Student& zhangsan)
{
if (pname)
{
delete[]pname;
pname = NULL;
}
int name_len = strlen(zhangsan.pname);
pname = new char[name_len + 1] ;
memset(pname, 0, name_len);
strcpy(pname, zhangsan.pname);
/*sex = zhangsan.sex;
age = zhangsan.age;
num = zhangsan.num;*/
return *this;
}
int main()
{
Student zhangsan((char*)"zhangsan", 'f', 1001, 20), lisi;
lisi = zhangsan;
return 0;
}
代码给你改了,改了的地方加了少量注释,以后我就不给人改代码了,这类的帖子之前就改过,改了也没什么帮助,参考帖子: https://www.cctry.com/thread-301170-1-1.html
要自己学会调试,可以试着单步调试,运行到出错的地方,查一下为什么这么写会出错,解决不了再带疑问来论坛发贴,多看书,有的东西有的细节书里才有的,你的基础还需要大大的加油!
- #include<iostream>
- #include<string>
- using namespace std;
- class Student
- {
- public:
- char*pname;
- char sex;
- int age;
- int num;
- Student() {};
- Student(char *t_name, char t_sex, int t_age, int t_num);
- ~Student();
- Student& operator= (const Student& zhangsan);
- };
- Student::Student(char *t_name, char t_sex, int t_age, int t_num) :sex(t_sex), age(t_age), num(t_num)
- {
- // int n_len = 0; //可略
- // char *pname = NULL; //这叫局部指针变量,会覆盖类中同名的pname,出了这个方法就失效了
- int n_len = strlen(t_name) + 1;
- pname = new char[n_len] { 0 };
- // memset(pname, 0, n_len); //不需要
- strcpy_s(pname, n_len, t_name); //高版本VS需要要用带_s的
- }
- Student::~Student()
- {
- if (pname)
- {
- delete[]pname;
- *pname = NULL;
- }
- cout << "~Student+++++++++++++" << endl;
- }
- Student &Student::operator= (const Student& zhangsan)
- {
- if (pname)
- {
- delete[]pname;
- pname = NULL;
- }
- int name_len = strlen(zhangsan.pname) + 1;
- pname = new char[name_len]{ 0 };
- // memset(pname, 0, name_len); //不需要
- strcpy_s(pname, name_len, zhangsan.pname); //高版本VS需要要用带_s的
- /*sex = zhangsan.sex;
- age = zhangsan.age;
- num = zhangsan.num;*/
- return *this;
- }
- int main()
- {
- Student zhangsan((char*)"zhangsan", 'f', 1001, 20), lisi;
- lisi = zhangsan;
- return 0;
- }
复制代码
|
上一篇: opencv视频处理卡顿下一篇: 关于MFCEditBrowseCtrl控件的问题
|