我在 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 错误。
问题是:有什么更好的方法可以将它们分配到堆上并仍然像访问普通数组一样继续访问它们?
附言。我环顾四周,但仍然没有找到我要找的东西。谢谢你的包容!
最佳答案
将它们声明为全局变量或static
,这样它们就不会占用堆栈空间:
static char booting[96][25] = { { 0x00, ... }, ... };
或者使用malloc()
进行动态内存分配:
char (*booting)[25] = malloc(96 * sizeof(*booting));
关于C多维数组堆赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392066/