C多维数组堆赋值

标签 c arrays pointers multidimensional-array

我在 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/

相关文章:

c - C 中比较空字符串的结果

javascript - 我如何在 JavaScript 中反转 JSON?

php - 通知: Array to string conversion when with two arrays

pointers - 我是如何混淆 goroutine 中变量和指针的范围的?

c - 是否存在可以在头文件中定义 C 函数的情况?

c - __NR_gettid 和 SYS_gettid 之间的区别

c - 函数 ‘mknod’ 的隐式声明,但我包含了 header

arrays - 如何创建谓词以在 Swift 中过滤具有关联值的枚举数组?

c - C中通过void函数初始化指向结构体的指针

C 指向数组的指针示例停止工作