【发布时间】:2018-11-24 22:56:03
【问题描述】:
我正在开发图形库,目前正在优化。据我所知(如果我错了,请纠正我),在 GCC/G++ 编译器中,只读变量和常量放在 flash 的文本部分中(我正在研究基于 ARM 处理器的嵌入式系统)和这提供了一种有效的方式来保存大量数据,而不是依赖于 RAM。
因此,我需要初始化一个类中声明的 const 数组,这是我的方法:
#include <iostream>
using namespace std;
class BITMAP{
public:
const uint16_t *BMP; // Image for this graphic object
BITMAP(uint16_t *bmp) : BMP(bmp) {} // This is where I initialize the const array
};
class GFX{
public:
void init_bmp();
void render();
private:
// Object
BITMAP *bmp_image;
};
void GFX::init_bmp()
{
cout << "Setting..." << endl;
uint16_t *BMP1 = new uint16_t[2];
BMP1[0] = 0xFFFF;
BMP1[1] = 0xFFFF;
BITMAP bmp_image(BMP1);
cout << "done!" << endl;
delete[] BMP1;
}
void GFX::render()
{
for( int i=0; i<2; i++ )
{
cout << i << ":" << bmp_image->BMP[i] << endl;
}
}
int main()
{
GFX img;
img.test();
img.render();
return 0;
}
每当我尝试读取BITMAP::BMP 的内容时,上面的代码都会给我一个分段错误。在上面的代码中初始化const uint16_t *BMP 的正确方法是什么?
【问题讨论】:
-
您的问题似乎是
GFX::init_bmp。它创建BMP指针,然后将其删除。在init_bmp之外没有什么好处。也许delete[] BMP1;应该移到析构函数中。 -
您无法使用 new 初始化将存储在 ROM 中的数组。查看
constexpr和std::array<>
标签: c++ constructor constants