- 论坛徽章:
- 0
|
用下面的方法申请二维数组,在vc和gcc3.4.3下可以得到正确的结果,在gcc3.4.6下Segmentation fault。帮忙看看错在那里。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /**********************************************/
- #define trigonometric_array(ptr,row,col) (ptr)=alloc_trigonometric_array(#ptr,__FILE__,__LINE__,\
- (row),(col),sizeof(**(ptr)))
- #define free_trigonometric free_trigonometric_array(ptr,row,col) free_arry2d( (ptr),(row),(col) )
- /************************************************************
- 申请一个三角矩阵,有下三角表示
- 根据对三角矩阵定义,row必须等于col。
- by glf
- *************************************************************/
- void *alloc_trigonometric_array(char *name,char *file,int line,
- unsigned row,unsigned col,unsigned elsize)
- {
- void **p;
- unsigned i,j;
- p=NULL;
- if ((row==0)||(col==0)||(elsize==0))
- p=NULL;
- else
- {
- if( row != col)
- {
- printf ("error\n");
- return p;
- }
- if((p=(void **)calloc((size_t)row,(size_t)elsize)) == NULL)
- {
- printf ("error\n");
- }
- for(i=0;i<row;i++)
- {
- if((*(p+i)=(void *)calloc((size_t)(i+1),(size_t)elsize)) == NULL)
- {
- printf ("error\n");
- }
- j= i+1;
- printf("%3d %3d\n", i, j);
- }
- }
- return p;
- }
- void free_trigonometric_array(void **p, unsigned row,unsigned col)
- {
- unsigned i;
- for(i=0;i<col;i++)
- free(*(p+i));
- free(p);
- }
- int
- main ()
- {
- int **array;
- int i,j;
- trigonometric_array (array, 5, 5);
- for (i = 0; i < 5; ++i)
- {
- for (j = 0; j <=i; ++j)
- {
- array[i][j] = i + j;
- printf("%3d ",array[i][j]);
- }
- printf("\n");
- }
- }
复制代码 |
|