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

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

概述首先摘录《InsideTheC++ObjectModel》中的一段话:把单一元素的数组放在一个struct的尾端,于是每个structobjects可以拥有可变大小的数组:

首先摘录《InsIDe The C++ Object Model》中的一段话:

把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组:

struct mumble {  char pc[1];};//获取一个字符串,然后为struct本身和该字符串配置足够的内存struct mumble *pmumbl = (struct mumble*)malloc(sizeof(structmumble) + strlen(string) + 1);strcpy(pmumbl->pc,string);

 

书上已经说得很明白,但个人理解的时候开始还是出了点问题,错误地认为 mumble 对象的 pc 成员在栈上,以为 strcpy *** 作造成数组溢出而覆盖了后续内存。

实际上对象指针pmumbl所指的内存全部位于堆上,如下图所示:

指针 pmumbl 指向的是 malloc 所分配的整个内存,而 pmumbl->pc 指向的是这块内存的第一个字节,因为 malloc *** 作为整个 string 分配了足够的内存,所以在 strcpy 时,虽然溢出了 pc 的内存范围,但没有溢出 struct 的内存范围,使得 strcpy 的结果是合理的和可控的。这样一来,相当于 struct 拥有了可变大小的数组,更加灵活。

以上就是小编为大家带来的C++使struct对象拥有可变大小的数组(详解)全部内容了,希望大家多多支持编程小技巧~

总结

以上是内存溢出为你收集整理的C++使struct对象拥有可变大小的数组(详解)全部内容,希望文章能够帮你解决C++使struct对象拥有可变大小的数组(详解)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1245761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存