- 论坛徽章:
- 0
|
这也是近期编写 libscws 时用到的一个小功能,动态2维数组。
struct xxx **x;
x = (struct xxx **) darray_new(5, 4, sizeof(struct xxx));
...
这里就可以用 x[1][3] ... x[0][3] ... 来操作了:)
...
darray_free(x);
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void **darray_new(int row, int col, int size)
- {
- void **arr;
- arr = (void **) malloc(sizeof(void *) * row + size * row * col);
- if (arr != NULL)
- {
- void *head;
- head = (void *) arr + sizeof(void *) * row;
- memset(arr, 0, sizeof(void *) * row + size * row * col);
- while (row--)
- arr[row] = head + size * row * col;
- }
- return arr;
- }
- void darray_free(void **arr)
- {
- if (arr != NULL)
- free(arr);
- }
复制代码 |
|