1

我在 C 中有一堆多维数组。

它们看起来像这样:(它们是字符,因为 c 中的整数占用 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 错误。

问题是:有什么更好的方法将它们分配到堆上并仍然像堆栈上的普通数组一样继续访问它们?

附言。我环顾四周,但仍然没有找到我想要的东西。谢谢你陪我!

4

2 回答 2

5

要么将它们声明为全局变量,要么将它们声明为static不占用堆栈空间:

static char booting[96][25] = { { 0x00, ... }, ... };

malloc()用于动态内存分配:

char (*booting)[25] = malloc(96 * sizeof(*booting));
于 2013-08-22T22:58:03.967 回答
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];
    }
}
于 2013-08-23T00:18:58.337 回答