結構體中存在string型別成員
阿新 • • 發佈:2019-01-09
#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的建構函式,所以就構建起了物件,記憶體訪問衝突就不會發生了。