国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++使struct對象擁有可變大小的數組(詳解)

2020-05-23 13:57:25
字體:
來源:轉載
供稿:網友

首先摘錄《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所指的內存全部位于堆上,如下圖所示:

C++,struct,數組

指針 pmumbl 指向的是 malloc 所分配的整個內存,而 pmumbl->pc 指向的是這塊內存的第一個字節,因為 malloc 操作為整個 string 分配了足夠的內存,所以在 strcpy 時,雖然溢出了 pc 的內存范圍,但沒有溢出 struct 的內存范圍,使得 strcpy 的結果是合理的和可控的。這樣一來,相當于 struct 擁有了可變大小的數組,更加靈活。

以上就是小編為大家帶來的C++使struct對象擁有可變大小的數組(詳解)全部內容了,希望大家多多支持VEVB武林網~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉沽区| 南汇区| 马山县| 奉化市| 曲沃县| 大宁县| 文成县| 蒙山县| 惠水县| 兰州市| 新乐市| 隆尧县| 汤原县| 翁牛特旗| 德庆县| 台北县| 且末县| 柳林县| 屏边| 淳安县| 恩平市| 鄯善县| 钟山县| 鄢陵县| 海阳市| 赫章县| 南宫市| 漳平市| 茌平县| 芜湖市| 贺兰县| 峨边| 宁强县| 临澧县| 卢湾区| 义马市| 济南市| 岳阳市| 祁门县| 卢湾区| 威远县|