C分配不同大小的二维数组

标签 c arrays malloc

我有这个:

uint64_t **array;
int a;

if((array = malloc(8 * 25)) == NULL){
    errx(1, "malloc");
}

for(a = 0; a < 25; a++){
    if((array[a] = malloc(8 * (1 << a))) == NULL){
        errx(1, "malloc 1");
    }   
}

在最坏的情况下,我将使用 2^a 位,这意味着,我并不总是需要使用 uint64_t,甚至 uint。我的想法是为 < 8 分配 1 个字节,为 < 16 和 >=8 分配 2 个字节,这样就分配给 8 个字节(uint64_t)。

可以这样做吗?我如何仅使用我的变量数组来做到这一点?

最佳答案

这可能应该是一条评论(或 3 条),但是......

您需要首先计算出您需要多少字节(以及需要什么字节,尽管我假设您已经涵盖了该部分。)

25 是什么?为什么要为 25 个大小为 8、16、32 ... 2^27 的不同数组分配内存?这可能是示例代码,但我们仍然被一个神奇的数字迷惑了:25。我们可以使用常量的名称(或预处理器宏)。

8 是另一个神奇的数字,它也是有问题的。 sizeof(*array) 不保证为 8。

我对你的想法也有点困惑。您当前的代码为 a=7 分配 1024 字节。一个字节如何足以存储您认为需要在原型(prototype)中分配 1024 字节的任何内容?

关于C分配不同大小的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10098099/

相关文章:

c - 从 GPtrArray 中提取指向数据的指针

c - 确定网络接口(interface)是无线的还是有线的

c - 当窗口超过 8 列时,边框无法正确绘制

c - WIN32和其他c字符串的区别

java - if 语句没有为字数统计程序中的计数器添加值

将字符映射表从主机内存复制到 CUDA 中的设备

c - 有没有办法找出在 c 中使用 malloc 时可用的最大字节数?

c - 在C中使用scanf解析输入

javascript - 使用点击功能 react JS 渲染元素并将索引传递给点击功能

从另一个结构复制到新的或现有的结构