2017-02-03 41 views
0

沒有對類進行任何更改,因此我不能添加任何爲我設置名稱的新函數。代碼無法輸入名稱?

class ele 
{ 

char* name; 
public: 

ele() :name(nullptr){} 
~ele() 
{ 
    if (name) 
     delete[]name; 
} 
char*& GetName(); 
}; 

#endif 

我嘗試訪問該名稱,但它給我錯誤後cin調試斷言失敗。無效的空指針。

> `  char*& ele::GetName() 
    { 
    cout << "Please Enter the name"<< endl; 
     cin >> this->name; 
     return this->name; 
     }` 
+1

'this-> name'是'nullptr'因爲這就是你在構造函數中初始化它的方式。你不能從'std :: cin'讀入'nullptr'。您需要在某個時間點分配存儲空間並將'name'設置爲指向它。你可以通過使用'std :: string'來節省很多麻煩。 –

+0

我很想知道'char *&'類型是什麼? – 2017-02-03 19:03:13

+0

告訴寫這個可怕類的人,析構函數中的'nullptr'檢查是多餘的。 –

回答

3

如果你不能改變你的類(和使用std::string),你需要cin>>this->name之前至少分配內存,現在使用的是空poitner這是UB。所以你的修正看起來如下:

if (this->name == nullptr) 
    this->name = new char[64]; // << !! 
cin >> this->name; 
+0

這對我很有用。謝謝:) – digital0011

+0

@ user4581301完成 – marcinj

+0

@ user4581301可以請你投票我的問題。 – digital0011