Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分配不同大小的2D数组_C_Arrays_Malloc - Fatal编程技术网

C 分配不同大小的2D数组

C 分配不同大小的2D数组,c,arrays,malloc,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 **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\u t,甚至uint。我的想法是只为<8分配1个字节,为<16和>=8分配2个字节,这样就可以分配到8个字节uint64\t


有可能吗?如何仅使用变量数组就可以做到这一点

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

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

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

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


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

我不太理解这个问题:您是在试图分配一个位数组来存储单个位,还是只是担心分配过多?@Frederico注意,在最坏的情况下,您使用的是2^a+3字节,而不是2^a位以字节而不是位分配,因此这不会像您所做的那样工作expect@LiraNuna只关心过多的分配8*1 2^a+3字节注意malloc以字节为单位分配,除非你在一个非常有限的嵌入式系统上,在这里保存这几个字节,那里不会给你任何东西,到目前为止,最好的选择是不用担心它,只使用足够大的类型,如uint64\t。malloc增加的开销可能会比过度分配的几个字节浪费更多的内存,因此,如果您确实需要保存每个字节,请从在一个大块中分配所有数据开始。