anewbies 2015-11-09 14:03 采纳率: 25%
浏览 1856
已结题

关于结构体指针malloc不够的问题,求教!

定义了一个结构体类型:
typedef struct _tag_str{

  char * first;
        short  second;

}str ,*pstr;

然后再定义一个结构体
typedef struct _tag_str1{
pstr first;
float second;
}str1,*pstr1;

定义一个变量 pstr1 strr;

在对strr初始化:strr=(pstr1)malloc(sizeof(str1)), 这样其实malloc的空间大小只是一个
float的大小和一个指针变量的大小,并不是两个结构体合起来的大小,这时我为了初始化
strr->first这个结构体指针 做这样的操作:strr->first=(pstr)malloc(sizeof(str));又开
辟一个空间,现在的烦恼是既然strr的位于first的地方头一回空间开辟的只是一个指针的大小,那么第二回在这个地方又开辟了一个sizeof(str)大小的空间,这样做是不是超出了第一次开辟的空间,还是两个空间在内存中本来就是两个地方?假如把第二个结构体中的第一个变量换成str first就不存在这样的疑问了,因为第一次malloc的时候一次把空间申请够了。

  • 写回答

4条回答 默认 最新

  • zuishikonghuan 2015-11-09 14:18
    关注

    第二个struct里面本来就是一个指针变量和一个float变量,sizeof的时候就只有一个指针变量的长度+一个float变量的长度,所以这个指针还是一个空指针(也可能是野指针),所以自然要再申请一个第一个struct,他们的内存自然是两块地方,至于说连不连续就不一定了

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器