源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C++使struct对象拥有可变大小的数组(详解)

  • 时间:2022-01-20 18:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C++使struct对象拥有可变大小的数组(详解)
首先摘录《Inside The C++ Object Model》中的一段话: [b]把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组:[/b]
struct mumble {

  char pc[1];

};

//获取一个字符串,然后为struct本身和该字符串配置足够的内存

struct mumble *pmumbl = (struct mumble*)malloc(sizeof(struct
mumble) + strlen(string) + 1);

strcpy(pmumbl->pc, string);

  书上已经说得很明白,但个人理解的时候开始还是出了点问题,错误地认为 mumble 对象的 pc 成员在栈上,以为 strcpy 操作造成数组溢出而覆盖了后续内存。 实际上对象指针pmumbl所指的内存全部位于堆上,如下图所示: [img]http://files.jb51.net/file_images/game/201612/20161221104418.jpg[/img] 指针 pmumbl 指向的是 malloc 所分配的整个内存,而 pmumbl->pc 指向的是这块内存的第一个字节,因为 malloc 操作为整个 string 分配了足够的内存,所以在 strcpy 时,虽然溢出了 pc 的内存范围,但没有溢出 struct 的内存范围,使得 strcpy 的结果是合理的和可控的。这样一来,相当于 struct 拥有了可变大小的数组,更加灵活。 以上就是小编为大家带来的C++使struct对象拥有可变大小的数组(详解)全部内容了,希望大家多多支持编程素材网~
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部