我在C中有一堆多维数组。
它们看起来像这样:(它们是字符,因为c中的int占用4个字节的内存而不是1个字节的字符,它们不用作字符串)
char booting[96][25] = {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},{0x06,0x7e,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} ... .. ..
他们有2400个字符长,我有很多。 如果我用它们中的几个来做它可以正常工作,我可以用以下方式访问它们:
char current_pixel = booting[34][2];
但是在9或10个数组定义为这样但是编译好之后,在运行时我得到StackOverflow错误。
问题是:什么是在堆上分配它们并仍然继续访问它们的更好方法,就像它们是堆栈上的普通数组一样?
PS。我环顾四周,但仍然找不到我想要的东西。谢谢你的支持!
答案 0 :(得分:5)
将它们声明为全局变量或static
,以便它们不占用堆栈空间:
static char booting[96][25] = { { 0x00, ... }, ... };
或者使用malloc()
进行动态内存分配:
char (*booting)[25] = malloc(96 * sizeof(*booting));
答案 1 :(得分:1)
vector< vector< char > > booting(y_size, vector< char >(x_size, starting_value));
以这种方式访问(x和y可能与您的期望相反)
for (int y = 0; y < y_size; y++)
{
for (int x = 0; x < x_size; x++)
{
cout << booting[y][x];
}
}