gpt4 book ai didi

c++ - 基类指针和段错误

转载 作者:行者123 更新时间:2023-12-03 08:35:44 25 4
gpt4 key购买 nike

以下代码可以编译,但在运行时会出现段错误。我使用的是动态内存主要使用指向派生类对象的基类指针,并且在运行时会出错。

#include <iostream>
using namespace std;

class Base {
public:
int b;
int b1;
Base() : b(0), b1(0) { cout << "Base constructor" << endl; }
virtual void Input() {
cout << "Enter number b : ";
cin >> b >> b1;
// return *this;
}
virtual ~Base() {}
};
class Derived : public Base {
public:
int d;
// Constructor
Derived() : d(0) { cout << "Derived constructor" << endl; }
void Input() {
Base::Input();
cout << "Enter number d : ";
cin >> d; //>> d1;
// return *this;
}
~Derived() {}
};

int main() {
Base *s = new Derived[2];
// When complexity of data members increases this line causes
// segmentation fault
s[1].Input(); // Here the problem

delete[] s;
}

最佳答案

你不能这样做:

Base* s = new Derived[2];

s 基本上被认为是一个 Base 实例的数组,而里面存储了 Derived 的实例。

您需要创建一个指向 Base 的指针数组,并用指向动态创建的 Derived 对象的指针填充它(参见 this question ),或者,最好使用一个 vector :

std::vector<std::unique_ptr<Base>> s;
s.push_back(std::make_unique<Derived>());
s.push_back(std::make_unique<Derived>());

关于c++ - 基类指针和段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59110775/

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