程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++使struct對象擁有可變大小的數組(詳解)

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

編輯:關於C++

C++使struct對象擁有可變大小的數組(詳解)。本站提示廣大學習愛好者:(C++使struct對象擁有可變大小的數組(詳解))文章只能為提供參考,不一定能成為您想要的結果。以下是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對象擁有可變大小的數組(詳解)全部內容了,希望大家多多支持~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved