我正试图在Arduino Due上做简单的3D图形。其中,我创建了一个PointContainer
类和一个Vector3D
类。我意识到我有一个内存问题,因为当我创建了一个约100分的对象时,Arduino草图将不起作用。用'new []'运算符分配内存
我在arduino.cc论坛上使用了建议的代码来监视内存使用情况。
这是代码在我的Arduino草图的setup()
功能的线路:
PointContainer pcSphere(84);
这条线之前,可用内存为55024个字节后,它是32480个字节。
这是怎么PointContainer
和Vector3D
类定义:
class Vector3D {
public:
Vector3D(int16_t x, int16_t y, int16_t z, int16_t w);
int32_t data[4] = {0, 0, 0, 128};
};
Vector3D::Vector3D(int16_t x, int16_t y, int16_t z, int16_t w){
data[0] = x<<7;
data[1] = y<<7;
data[2] = z<<7;
data[3] = w<<7;
}
class PointContainer {
public:
PointContainer(uint8_t pointCount);
Vector3D *points;
private:
uint8_t pointCount;
};
PointContainer::PointContainer(uint8_t pointCount) {
this->pointCount = pointCount;
points = new Vector3D [pointCount * sizeof(Vector3D)];
}
我知道我有使用new
后使用delete
来释放内存。但是我使用矢量数据直到程序结束,所以这不是问题。
sizeof(Vector3D)
是16,我检查了。 PointContainer pcSphere(84)
应该只分配约。内存1344字节,但现在,它分配22544字节。当我直接创建阵列时,如Vector3D points[84] = {Vector3D(1,1,1,1),...}
,它分配正确数量的1344字节的内存。
我想我以错误的方式使用new
操作符。但是动态创建一个简单数组的正确方法是什么?
'T * p = new T [123];''''''''''''''''' 'T'是你的类型。 – Ron
@Ron请在你写之前阅读。 – uzumaki
我做到了。是不是你的问题:_但是什么是动态创建一个简单数组的正确方法?_ – Ron