- 论坛徽章:
- 0
|
原帖由 hightman 于 2007-6-8 16:33 发表
这也是近期编写 libscws 时用到的一个小功能,动态2维数组。
struct xxx **x;
x = (struct xxx **) darray_new(5, 4, sizeof(struct xxx));
...
这里就可以用 x[1][3] ... x[0][3] ... 来操作了:)
...
好像释放的不彻底。。
测试代码:
- #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);
- }
- int
- main(void)
- {
- char **p;
- p=(char **)darray_new(4,5,1);
- strcpy(p[0],"abc");
- strcpy(p[1],"def");
- strcpy(p[2],"ghi");
- printf("p[0]:%s\tp[1]:%s\tp2[2]:%s\n",p[0],p[1],p[2]);
- printf("&p[0]:%x\t&p[1]:%x\t&p2[2]:%x\n",&p[0],&p[1],&p[2]);
- darray_free((void **)p);
- printf("p[0]:%s\tp[1]:%s\t:p2[2]:%s\n",p[0],p[1],p[2]);
- }
- 结果:
- p[0]:abc p[1]:def p2[2]:ghi
- &p[0]:8b37008 &p[1]:8b3700c &p2[2]:8b37010
- p[0]:(null) p[1]:def :p2[2]:ghi
复制代码
[ 本帖最后由 ruoyisiyu 于 2008-4-11 10:51 编辑 ] |
|