C多维数组堆赋值

时间:2013-08-22 22:53:05

标签: c arrays pointers multidimensional-array

我在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。我环顾四周,但仍然找不到我想要的东西。谢谢你的支持!

2 个答案:

答案 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];
    }
}