二维结构体指针初始化后赋值失败
本帖最后由 kingnch 于 2012-12-12 19:29:58 编辑 我自定义了一个结构体PPP,结构体内部就是简单的float和int类型数值。然后写了对不同维数的结构体进行初始化的子函数,二维初始化的子函数如下:
PPP **loc2ppp(int n1, int n2)
{
int i2;
PPP **p;
if ((p=(PPP **)malloc(n2*sizeof(PPP *)))==NULL)
return NULL;
if ((p[0]=(PPP *)malloc(n2*n1*sizeof(PPP)))==NULL) {
free(p);
return NULL;
}
for (i2=0; i2<n2; i2++) {
p[i2] = (PPP*)p[0]+sizeof(PPP)*n1*i2;
}
return p;
}
PPP **abc = loc2ppp(9, 9);
PPP **loc2ppp(int n1, int n2)
{
int i1, i2;
PPP **p;
if ((p=(PPP **)malloc(n2*n1*sizeof(PPP *)))==NULL){
return NULL;
}
if ((p[0]=(PPP *)malloc(n2*n1*sizeof(PPP)))==NULL) {
free(p);
return NULL;
}
for (i1=0; i1<n1; i1++) {
for (i2=0; i2<n2; i2++) {
p[i1][i2] = p[0]+ i1+i2;
}
}
return p;
}
p[i2] = (PPP*)p[0]+sizeof(PPP)*n1*i2;
p[i2] = (PPP*)p[0]+n1*i2;
PPP **loc2ppp(int n1, int n2)
{
PPP **column;
PPP *line;
int i;
if((column=(PPP **)malloc(n2*sizeof(PPP *) + n1 * n2*sizeof(PPP)))==NULL)
return NULL;
line = (PPP *)(column + n2);
for(i = 0; i != n2; ++i)
column[i] = line + i *n2;
return column;
}