gpt4 book ai didi

c++ - 为什么此 C++ 代码会导致运行时错误?

转载 作者:搜寻专家 更新时间:2023-10-30 23:48:18 24 4
gpt4 key购买 nike

当我尝试在 Visual Studio 2010 中运行此代码时出现以下错误:

Unhandled exception at 0x012c23d3 in matrix.exe: 0xC0000005: Access violation reading location 0xccccccd0.

代码如下:

#include <vector>

using namespace std;

class matrix : public vector<vector<char>> {
public:
matrix(int x, int y) {
this->resize(x);
for (int i = 0; i < y; ++i) {
this[i].resize(y);
}
}
};

void main() {
matrix mat(10, 10);
}

我正在尝试创建一个 matrixvector<vector<char>> 上扩展的类通过添加内置的矩阵操作函数来键入。但是,我无法让此构造函数正常运行。

感谢您的帮助。

最佳答案

首先,不要从标准容器公开继承:它们不是为它而设计的,没有虚拟析构函数。即使您从未打算让您的派生被基类指针删除,多年后也会有人出现并这样做,而没有意识到其中的陷阱。从标准容器继承 protected ly 或 private ly 很好,因为您不能尝试以多态方式破坏您的 child 。

那么你的问题是双重的:i < y而不是 i < x在你的循环条件和this[i]而不是 (*this)[i]这将导致它使用父类 operator[]而不是内置的 []数组和指针上的运算符。

但是你的整个构造函数都可以取消:

matrix(int x, int y) : vector<vector<char> >(x, vector<char>(y)) { }

关于c++ - 为什么此 C++ 代码会导致运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699025/

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