malloc给结构体分配空间的问题

sfxyz7 2013-06-26 05:39:55
struct image
{
struct header *info;
unsigned char **data;
};
struct image *newimage(int nr,int nc)
{
struct image *x;
x = (struct image *) malloc( sizeof (struct image) );
//这里已经分配过了,为什么还要分别给info和data分配?详细的解释一下。
x->info = (struct header *)malloc( sizeof(struct header) );
x->data = (unsigned char **)malloc(sizeof(unsigned char *)*nr);
//这里已经给data分配了,为什么还要给data[0]分配,如果需要时不时还要给data[i](i=1,2,3...)
//分配?再解释一下。
x->data[0] = (unsigned char *)malloc (nr*nc);
......
return x;
}
...全文
1865 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sfxyz7 2013-06-27
  • 打赏
  • 举报
回复
追问下 x->data[0] = (unsigned char *)malloc (nr*nc);//这个分配了内存,下面的代码紧挨着这一行 for (i=1; i<nr; i++) { x->data[i] = (x->data[0]+nr*i);//这里为什么又不分配了? }
anshiny 2013-06-26
  • 打赏
  • 举报
回复 1
指针有了存放空间,再给指针所指空间分配空间。
sfxyz7 2013-06-26
  • 打赏
  • 举报
回复
明白了,谢谢二位。
Carl_CCC 2013-06-26
  • 打赏
  • 举报
回复
指针会指向一块内存,指针本身也是要占用内存的。 x = (struct image *) malloc( sizeof (struct image) ); 是给指针成员分配内存。 但指针指向的地方还没有分配内存呢,所以就需要又malloc
cdpcsc 2013-06-26
  • 打赏
  • 举报
回复
问法好奇怪啊。 x = (struct image *) malloc( sizeof (struct image) ); 这里已经分配过了,为什么还要分别给info和data分配?详细的解释一下 是给x分配内存 两个指针也就是8个字节的内存, 而struct header *info; header的大小也许是80,你刚分了8个,怎么说也给info分配内存了呢?
Dobzhansky 2013-06-26
  • 打赏
  • 举报
回复
指针只是个指针, 指向的地方需要分配

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧