new和delete對結構體分配記憶體的問題

2021-06-21 14:36:36 字數 397 閱讀 4858

今天幫小師弟調**,發現乙個問題,他在結構體裡面定義了乙個string型別,定義了幾個結構體指標並用malloc分配了記憶體。

struct emplyee ;

struct emplyee *h = new struct emplyee()/*(struct emplyee*)malloc(sizeof(struct emplyee))*/;

cout>h->m_strname;

cout<<"name:"分配了32個位元組的記憶體,但從輸入字元獲取h->m_strname時,程式掛掉了。我後來用new分配了記憶體,程式就可以執行了。在網上找了一下資料,發現是malloc分配記憶體時,不呼叫建構函式生成物件,而string這樣的類必須要呼叫建構函式生成物件,故沒有生成string例項,不能對其賦值。而new會呼叫建構函式。

深入new和delete小結

new和delete是c 中使用頻率非常高的兩個關鍵字,可以說c 記憶體操作的核心就在於這兩個關鍵字,近幾天閱讀了相關的文章,發現自己對於這兩個關鍵字的理解太過膚淺,因此做了一些個人總結。首先要明確一點,new和delete所操作的記憶體全部是在堆區,這個區域的記憶體和棧區是不一樣的,不會自動釋放,...

New和delete的原理

new和delete的原理 當我們在程式中寫下 new 和 delete 時,我們實際上呼叫的是 c 語言內建的 new operator 和 delete operator.所謂語言內建就是說我們不能更改其含義,它的功能總是一致的。以 new operator 為例,它總是先分配足夠的記憶體,而後...

多型與new和delete

在使用多型時,在new和delete時一定要保持原有物件型別,不能在new時就進行強制轉換,否則會在析構時出現問題。其他時候可以使用 如下面的例子 class cbase cbase virtual void call class cinherit public cbase cinherit vir...