我正試圖在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