为矩阵分配新内存

时间:2013-05-14 22:13:16

标签: c++ memory-management matrix

我有两个班级:

class A

class B: class A

我想创建一个矩阵,每个指针指向B(1X2的垫子)。

所以我定义了:

A **mat;

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

现在我有2个元素:mat [0] [0],mat [0] [1]。

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

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

无论如何,这是我的猜测,因为你没有告诉我们很多关于AB的信息。

修改

要回答您的评论,我首先要限制您使用的原始指针数量。请改用vector向量。向量的每个元素都可以是指向A的原始指针。其运行时类型为BC

#include <vector>

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

答案 1 :(得分:1)

如果需要指向B的指针,则无需指定任何关于A的内容。由于B派生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];