【发布时间】:2019-08-18 20:09:37
【问题描述】:
运行这段代码,我遇到了这样的错误
'在 Project1.exe 中的 0x778D7FCB (ntdll.dll) 处引发异常:0xC0000005:访问冲突读取位置 0x00000014。'
此行出现此错误
~UnivStudnet() {
delete[]major; // error
}
#include <iostream>
#include <cstring>
using namespace std;
class Person {
private:
char * name;
public:
Person(const char * myname) {
name = new char[strlen(myname) + 1];
strcpy_s(name, strlen(name), myname);
}
~Person() {
delete[]name;
}
void WhatYourName() const {
cout << "My name is " << name << endl;
}
};
class UnivStudnet : public Person {
private:
char * major;
public:
UnivStudnet(const char * myname, const char * const mymajor) :Person(myname) {
major = new char[strlen(mymajor) + 1];
strcpy_s(major, strlen(major), mymajor);
}
~UnivStudnet() {
delete[]major;
}
void WhoAreYou() const {
WhatYourName();
cout << "My major is " << major << endl;
}
};
int main(void) {
UnivStudnet st1("kim", "Mathenatics");
st1.WhoAreYou();
UnivStudnet st2("hong", "Physiscs");
st2.WhoAreYou();
return 0;
}
如何解决这个错误?
【问题讨论】:
-
@hsalimi 即使在这里一般情况下做得更好,这并不重要,因为没有从基类指针中删除
-
也要实现复制/移动构造函数/赋值,否则如果进行复制操作,您将删除原始指针两次。
-
您确定您给我们的代码会产生无效的访问权限吗?为什么不使用 std::string ?
标签: c++ destructor