为矩阵分配一个新的内存

allocate a new memory for matrix

本文关键字:一个 内存 分配      更新时间:2023-10-16

我有两个类:

class A
class B: class A

我想创建一个矩阵,每个指针都指向B (mat (1X2))

所以我定义了:

A **mat;
mat = new A*[1];
*mat = new B[2]; // call the constructor.

我现在有两个元素:垫[0][0],垫[0][1]。

mat[0][0]初始化,但mat[0][1]为NULL。

请帮。

如果sizeof(A) < sizeof(B)大于A的数组不等于B的数组。由于在第二次分配中,您分配的具体对象大于*mat应该指向的对象,因此当您访问第二个元素时,它不会访问第二个B元素,而是切片到第一个。

这是我的猜测,因为你没有告诉我们太多关于AB

编辑

为了回答您的评论,我将从限制您使用的原始指针的数量开始。用向量的向量来代替。vector的每个元素都可以是指向A的原始指针。它的运行时类型可以是BC

#include <vector>
std::vector<std::vector<A*> > mat(1, std::vector<A*>(2, (A*)0));

如果你需要指向B的指针,你不需要指定关于A的任何东西。因为B派生A,你只需要为较大的A分配空间(在本例中为B)。

对于指针矩阵,您将需要以下内容:

B *** mat;
mat = new B**[1]; //Dimension 1 
mat[0] = new B*[2]; //Dimension 2 (array of pointers)
mat[0][0] = new B(); //Allocate B in [0][0]
mat[0][1] = new B(); //Allocate B in [0][1]

但如果你知道它总是1x2,只需使用以下命令:

B * mat[1][2];