結構體中存在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的構造函數,所以就構建起了對象,內存訪問衝突就不會發生了。
發佈了27 篇原創文章 · 獲贊 90 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章