如何制作一个动态三维数组,其中只有第一个维度是c中的动态维度



我有一个三维位表数组作为

bit_table[dim1][100][200];

第二维度和第三维度总是相同的。

但是dim1必须随着时间的推移而增长。

当该bit_table已满时,其大小需要在dim1维度中增长,并且旧内容需要保留

要保留表的旧内容,我应该只创建一个临时数组,将旧数组数据复制到其中,然后在数组展开后,将这些数据复制回来吗?或者有更好的方法吗?

编辑:

int dim1=10;
unsigned char (*bit_table)[100][200] = (unsigned char)malloc(dim1 * sizeof(*bit_table));
printf("enter new dimensionn");
     scanf(dim1);

您可以这样做:

int (*bit_table)[100][200] = malloc(dim1 * sizeof(*bit_table));
...
bit_table = realloc(bit_table, dim1_new * sizeof(*bit_table));
...
free(bit_table);

显然,您需要对这两个调用进行适当的错误处理。特别是,如果realloc失败(在上面的代码中),那么您将以内存泄漏告终。

对不起,我没有看到这里有什么特别的困难。除了Charlesworth提到的realloc。您也可以:

typedef unsigned char bit_table_elem[100][200];
// if you're using c, linked list will be a good choice
// but if you really need indexing, then use the realloc way...
struct bit_table_list {
    bit_table_elem elem;
    struct bit_table_list* next;
}
// if you're using c++, std vector will be better
std::vector<bit_table_elem> bit_table

相关内容

  • 没有找到相关文章

最新更新