C++ VS提示未加載 wntdll.pdb

如果網(wǎng)上各種誤人子弟的方法可以解決問題的話 我就不在這逼逼了

重點:出現(xiàn)這個肯定是你的代碼的問題 VS自己少東西的可能性幾乎為0

而問題基本都出在指針的使用上 一般都是你調(diào)用你的指針指向了錯誤的東西 / 你調(diào)用你的指針釋放了奇怪的內(nèi)容

以下為示范代碼:

#include<iostream>
#include<ctime>
#include<fstream>
#include<string>
#include<stack>
#include<vector>
#include<map>
using namespace std;
class Name {
private:
   char* first;
   char* second;
    char* third;

public:
    Name(string f = "", string s = "", string t = "")
    {
        first = new char[f.length() + 1];
        second = new char[s.length() + 1];
        third = new char[t.length() + 1];
        strcpy_s(first, f.length() + 1, f.c_str());
        strcpy_s(second, s.length() + 1, s.c_str());
        strcpy_s(third, t.length() + 1, t.c_str());
    }
    Name(Name& name)
    {
       
    }
    ~Name()
    {
        cout << "發(fā)病了" << endl;
        delete first;
        delete second;
        delete third;
    }
    void Printname()
    {
        cout << first << " " << second << " " << third << endl;
    }
};
class Person
{
private:
    Name n;
    string sex;
    string national;
public:
    Person(Name a, string sex, string national) :n(a), sex(sex), national(national)
    {
        cout << "構造完成锁荔!" << endl;
    }
    void printName()
    {
        n.Printname();
    }
    void printNational()
    {
        cout << national << endl;
    }
};

int main()
{
    Name name("比利王", "搞比利", "大xx");
    Person s(name, "男", "日暮里");
    s.printName();
    s.printNational();
}

你拿去跑 如果你的電腦不報未加載wntdll (使用windows10 vs2019) 那我當場把這個電腦連鍵盤鼠標一起吃下去

那問題出在哪里呢?

在那個被我刪掉的復制構造函數(shù)體里面 新建Person對象時使用了其構造函數(shù)狸窘,這時候我們是使用對象name來為Person中n賦值的汞扎,這使得無論是傳遞給構造函數(shù)參數(shù)還是用name初始化n都調(diào)用了復制構造函數(shù)欲虚,而char*的默認復制是值傳遞作媚。也就是你只是復制了指針的內(nèi)容 并沒有重新開辟內(nèi)存

于是 在形參name傳遞給n之后 name被回收 調(diào)用析構函數(shù) 此時你的三個指針指向的內(nèi)容已經(jīng)去世了I形馈6舸摇!码泞!

更不用提main函數(shù)結束后兄旬,析構Person 再析構name 你的指針早就被除名了 你再強調(diào)去除這個指針指向的內(nèi)容(鬼知道他這個地址已經(jīng)被操作系統(tǒng)分配給誰了)就出現(xiàn)了上述的錯誤

修改也很簡單

#include<iostream>
#include<ctime>
#include<fstream>
#include<string>
#include<stack>
#include<vector>
#include<map>
using namespace std;
class Name {
private:
   char* first;
   char* second;
    char* third;

public:
    Name(string f = "", string s = "", string t = "")
    {
        first = new char[f.length() + 1];
        second = new char[s.length() + 1];
        third = new char[t.length() + 1];
        strcpy_s(first, f.length() + 1, f.c_str());
        strcpy_s(second, s.length() + 1, s.c_str());
        strcpy_s(third, t.length() + 1, t.c_str());
    }
    Name(Name& name)
    {
        cout << "調(diào)用復制構造函數(shù)" << endl;
        int length1 = strlen(name.first);
        int length2 = strlen(name.second);
        int length3 = strlen(name.third);
        first = new char[length1+1];
        second = new char[length2+1];
        third = new char[length3+1];
        strcpy_s(first, length1+1,name.first);
        strcpy_s(second, length2+1,name.second);
        strcpy_s(third,length3+1,name.third);
    }
    ~Name()
    {
        cout << "發(fā)病了" << endl;
        delete first;
        delete second;
        delete third;
    }
    void Printname()
    {
        cout << first << " " << second << " " << third << endl;
    }
};
class Person
{
private:
    Name n;
    string sex;
    string national;
public:
    Person(Name a, string sex, string national) :n(a), sex(sex), national(national)
    {
        cout << "構造完成!" << endl;
    }
    void printName()
    {
        n.Printname();
    }
    void printNational()
    {
        cout << national << endl;
    }
};

int main()
{
    Name name("比利王", "搞比利", "大xx");
    Person s(name, "男", "日暮里");
    s.printName();
    s.printNational();
}

程序完美運行

這個故事告訴我們 能用string 就不要用char* 來裝逼 因為很多人都不知道如果你裝逼失敗了余寥,怎么指出你到底哪里裝錯了领铐。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市劈狐,隨后出現(xiàn)的幾起案子罐孝,更是在濱河造成了極大的恐慌,老刑警劉巖肥缔,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異汹来,居然都是意外死亡续膳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門收班,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坟岔,“玉大人,你說我怎么就攤上這事摔桦∩绺叮” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵邻耕,是天一觀的道長鸥咖。 經(jīng)常有香客問我,道長兄世,這世上最難降的妖魔是什么啼辣? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮御滩,結果婚禮上鸥拧,老公的妹妹穿的比我還像新娘。我一直安慰自己削解,他們只是感情好富弦,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著氛驮,像睡著了一般腕柜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天媳握,我揣著相機與錄音碱屁,去河邊找鬼。 笑死蛾找,一個胖子當著我的面吹牛娩脾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播打毛,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼柿赊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了幻枉?” 一聲冷哼從身側響起碰声,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎熬甫,沒想到半個月后胰挑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡椿肩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年瞻颂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郑象。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贡这,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出厂榛,到底是詐尸還是另有隱情盖矫,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布击奶,位于F島的核電站辈双,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏正歼。R本人自食惡果不足惜辐马,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局义。 院中可真熱鬧喜爷,春花似錦、人聲如沸萄唇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽另萤。三九已至湃密,卻和暖如春诅挑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泛源。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工拔妥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人达箍。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓没龙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缎玫。 傳聞我的和親對象是個殘疾皇子硬纤,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容