大佬教程收集整理的这篇文章主要介绍了C++使struct对象拥有可变大小的数组(详解),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先摘录《Inside The C++ Object Model》中的一段话:
把单一元素的数组放在一个struct的尾端,于是每个 struct objects 可以拥有可变大小的数组:
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所指的内存全部位于堆上,如下图所示:
指针 pmumbl 指向的是 malloc 所分配的整个内存,而 pmumbl->pc 指向的是这块内存的第一个字节,因为 malloc 操作为整个 String 分配了足够的内存,所以在 strcpy 时,虽然溢出了 pc 的内存范围,但没有溢出 struct 的内存范围,使得 strcpy 的结果是合理的和可控的。这样一来,相当于 struct 拥有了可变大小的数组,更加灵活。
以上就是小编为大家带来的C++使struct对象拥有可变大小的数组(详解)全部内容了,希望大家多多支持编程小技巧~
以上是大佬教程为你收集整理的C++使struct对象拥有可变大小的数组(详解)全部内容,希望文章能够帮你解决C++使struct对象拥有可变大小的数组(详解)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。