首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成动态三维数组,其中只有第一个维度是c中的动态数组

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

Stack Overflow用户
提问于 2012-03-27 12:56:14
回答 2查看 155关注 0票数 0

我有一个三维位表数组

bit_table[dim1][100][200];

第二维度和第三维度总是一样的。

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

当这个bit_table满时,它的大小需要在dim1维度中增长,而旧内容需要保留

为了保留表的旧内容,我应该创建一个临时数组,将旧的数组数据复制到它,并且在扩展数组之后,复制这个数据吗?还是有更好的方法来做呢?

编辑:

代码语言:javascript
运行
复制
int dim1=10;
unsigned char (*bit_table)[100][200] = (unsigned char)malloc(dim1 * sizeof(*bit_table));
printf("enter new dimension\n");
     scanf(dim1);

……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 12:59:31

你可以这样做:

代码语言:javascript
运行
复制
int (*bit_table)[100][200] = malloc(dim1 * sizeof(*bit_table));

...

bit_table = realloc(bit_table, dim1_new * sizeof(*bit_table));

...

free(bit_table);

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

票数 2
EN

Stack Overflow用户

发布于 2012-03-27 14:00:56

对不起,我没看到这里有什么特殊的困难。除了查尔斯沃思提到的realloc。您还可以:

代码语言:javascript
运行
复制
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
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9889948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档