2017-02-28 31 views
-1

運行了一個程序,我發現錯誤(分段錯誤)是從這個下面的代碼時,我有一個問題:C++操作符重載拷貝構造函數指針錯誤段flaut

char* OSname; 
char* HWname; 
Computer(const char* a,const char* b){ 
    strcpy(OSname,a); strcpy(HWname,b); 
} 

我不知道是什麼我做錯了嗎?

+0

出於興趣,你爲什麼提到複製構造函數?當然,拷貝構造函數看起來像'Computer(const Computer&other)' – doctorlove

+0

是的,我在我的程序中有計算機(const Computer&tmp),它也有strcpy()。所以我只提一次錯誤。 –

回答

1

char* OSname;聲明瞭一個指針,但沒有指向任何地方。如果你想在某處複製一個字符串,你需要一些存儲器,所以必須分配一些內存(記住釋放它)或者只是使用一個數組。

無論在哪種情況下,您都需要確保有足夠的內存用於完整的strcpy,並且複製的char *實際上是空終止或使用strncpy

既然你已經標記了這個C++這是值得我們思考的使用std::string代替:

std::string OSname; 
std::string HWname; 
Computer(const std::string & a,const std::string & b){ 
    OSname = a; HWname=b; 
} 

這是非常有可能避免你的問題。

+0

練習要求OSname和HWname是一個指針,我不擅長指針。 –

+0

抱怨誰設置練習! – doctorlove

+0

你需要像'char * OSname = new char [strlen(a)+ 1];'在執行strcpy之前,不要忘記在稍後刪除[]'。 – doctorlove