问题:如果一个结构的成员是指针类型,则向该结构请求内存不会为指针成员分配内存。
步骤如下。
# include stdio.h # include stdlib.htypedefstructexample { int * a; char *b; }example_t; intmain(intargc,char** argv ) {example_t *exam; exam=(example_t* ) malloc ) sizeof ) example_t ); if(null==Exam ) printf('%sn ',' exam malloc failed ' ); 返回- 1; }printf('%pn”,exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 自由(exam ); 返回0; }结果如下。
$ gcc exam.c $./a.out0x 1051150 (nil ) )表示没有将内存作为指针成员分配给结构。
解决方案:向结构申请空间时,同时向指针成员申请空间
# include stdio.h # include stdlib.htypedefstructexample { int * a; char *b; }example_t; intmain(intargc,char** argv ) {example_t *exam; exam=(example_t* ) malloc ) sizeof ) example_t ); if(null==Exam ) printf('%sn ',' exam malloc failed ' ); 返回- 1; }printf('%pn”,exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 打印((n ); Exam-a=(int* ) malloc (sizeof ) int ); Exam-b=(char* ) malloc (sizeof ) char ); printf(%p(n ),exam ); printf(%p(n ),exam-a ); printf(%p(n ),exam-b ); 自由(exam ); free(Exam-a ); free(Exam-b ); 返回0; }结果如下。
$gccexam.c$./a.out0xd8d150(nil ) ) nil )0xd8d1500xd8d5680xd8d578此时,结构的指针成员具有分配的内存。