結構體中存在string型別成員

2021-07-09 02:39:02 字數 417 閱讀 9047

#include

#include

#include

using namespace std;

typedef struct nodenode;

int main()

對於這個程式,在程式除錯過程中,在程式的最後一行是無論如何都過不了的。出現的錯誤就是記憶體訪問衝突。但是如果我們把malloc分配的記憶體改為new分配,node*node = new node(),問題立馬就解決了,這是為什麼呢?

只是因為在node 結構中包含了string型別成員,用malloc分配時,由於malloc沒有這樣的機制,導致無法呼叫string的建構函式,所以無法構建起string物件,給乙個不存在的物件賦值肯定錯誤。但是new分配記憶體時有這樣的機制,呼叫了string的建構函式,所以就構建起了物件,記憶體訪問衝突就不會發生了。

結構體型別

結構體型別建立 結構體宣告 struct a 分號不能丟上面一段 就可以被稱為乙個結構體,struct a為結構體名,內為成員變數,後必須加 其他形式的結構體宣告 1.匿名結構體宣告 用於結構體只使用一次是用匿名宣告 struct x x 為結構體變數struct a 20 p a 20 為結構體陣...

結構體中使用string

1.malloc只是負責申請一塊記憶體,沒有任何其他動作。2.直接宣告結構體或者new 乙個結構體指標,會呼叫預設建構函式。如果結構中包含類,同樣會呼叫成員類的預設建構函式。3.程式中的記憶體錯誤是因為使用malloc分配乙個結構體內存,但是string是乙個類。並沒有呼叫string的建構函式,所...

c 中的結構體型別

struct 型別是一種值型別,通常用來封裝小型相關變數組,例如,矩形的座標或庫存商品的特徵。下面的示例顯示了乙個簡單的結構宣告。public struct postaladdress 結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多 儘管結構的靜態字段可以初始化,結構例項字段宣告還是不能使...