C分配不同大小的2D阵列

时间:2012-04-10 23:55:22

标签: 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。我的想法是为&lt; 1分配一个字节。 8,2字节用于&lt; 16和a> = 8,这种方式为8字节(uint64_t)。

有可能吗?我怎么能只用我的变量数组呢?

1 个答案:

答案 0 :(得分:0)

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

你需要首先弄清楚你需要多少字节(以及为什么,但我认为你已经覆盖了那部分。)

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

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

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