c - 如何重新分配不同大小的二维结构指针

标签 c multidimensional-array struct malloc realloc

我想重新分配二维指针数组。必须是动态的如下ascii

+=====+==============+==============+==============+==============+======+
|     | [0]          | [1]          | [2]          | [3]          | [..] |
+=====+==============+==============+==============+==============+======+
| [0] | 'a'          | 'b'          | 'c'          | 'd'          |      |
+-----+--------------+--------------+--------------+--------------+------+
| [1] | object[0][0] | object[1][0] | object[2][0] | object[3][0] |      |
+-----+--------------+--------------+--------------+--------------+------+
| [2] | object[0][1] | object[1][1] | object[2][1] | object[3][1] |      |
+-----+--------------+--------------+--------------+--------------+------+
| [3] | object[0][2] | object[1][2] | object[2][2] |              |      |
+-----+--------------+--------------+--------------+--------------+------+
| [4] | object[0][3] |              | object[2][3] |              |      |
+-----+--------------+--------------+--------------+--------------+------+
| [5] | object[0][4] |              |              |              |      |
+-----+--------------+--------------+--------------+--------------+------+
| [6] | object[0][5] |              |              |              |      |
+-----+--------------+--------------+--------------+--------------+------+

在此表中,每个列的大小都不同。我怎样才能用 2d 结构做到这一点。我用 malloc 分配了矩阵。但我想重新分配第二个索引。像这个矩阵[25][n]。 N 必须为每个具有不同大小的列重新分配。但它必须在运行时

代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char word[20];
}Dictionary;

Dictionary **object;
void initializeDictionary()
{
     // Create matrix [29][1]
     object=(Dictionary**)malloc(29 * sizeof(Dictionary*));
     object[0]=(Dictionary*)malloc(1*sizeof(Dictionary));
}

最佳答案

有了指针,这是自然而然的。在您的代码中,您有一个 Dictionary**,它确实是指向 Dictionary 的指针。但是您可以看到它是一个 Dictionary* 数组,其中每个指针指向不同大小的 Dictionary 对象数组。

Dictionary** objects;
const int COLUMNS = 29;

objects = malloc(COLUMNS * sizeof(Dictionary*));

objects[0] = malloc(2 * sizeof(Dictionary)); // first column 2 elements
objects[1] = malloc(3 * sizeof(Dictionary)); // second column 3 elements

// ...

for (int i = 0; i < COLUMNS; ++i)
  free(objects[i]);

free(objects);

关于c - 如何重新分配不同大小的二维结构指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55679024/

相关文章:

ios - 如何将 Obj-C block 保存在 C 结构中?

arrays - 对结构数组执行数组函数

c++ - 从其他人内部调用 C 包装函数

PHP array_multisort - 如何保留键值?

javascript - 多维数组的问题

c# - 在不使用集合的情况下打乱二维数组

c - 从传递给函数的嵌套结构访问信息

C 程序以小时、分钟和秒为单位打印正常运行时间。

c++ - 无法使用 C++ 语法运行 Opencv

c - Fedora 32 位上的缓冲区溢出测试不更改 $eip 寄存器值