1. 程式人生 > >結構體中存在string型別成員

結構體中存在string型別成員

#include <iostream> #include <string> #include <cstdio> using namespace std; typedef struct node{ string str; }NODE; int main(){ string var = "lirao"; NODE * node = (NODE *)malloc (sizeof(NODE)); node->str = var; } 對於這個程式,在程式除錯過程中,在程式的最後一行是無論如何都過不了的。出現的錯誤就是記憶體訪問衝突。但是如果我們把malloc分配的記憶體改為new分配,NODE*node = new NODE(),問題立馬就解決了,這是為什麼呢? 只是因為在NODE 結構中包含了string型別成員,用malloc分配時,由於malloc沒有這樣的機制,導致無法呼叫string的建構函式,所以無法構建起string物件,給一個不存在的物件賦值肯定錯誤。但是new分配記憶體時有這樣的機制,呼叫了string的建構函式,所以就構建起了物件,記憶體訪問衝突就不會發生了。