2017-02-28 5 views
-1

をflaut私のプログラムを実行すると、私は問題を抱えていると私はエラー(セグメンテーションフォールト)は、この次のコードからであることが判明:C++演算子オーバーライドコピーコンストラクタポインタエラーセグメントが

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

私がわかりません私は間違っている。

+0

なぜ、コピーコンストラクタに言及していますか?確かにコピーコンストラクタは 'Computer(const Computer&other)'のように見えるでしょう – doctorlove

+0

はい私のコンピュータにはComputer(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

strcpyを実行する前に、 'char * OSname = new char [strlen(a)+ 1];'のようなものが必要で、後で '[]'を忘れることはありません。 'char * OSname = new char [strlen(a)+ 1];'を使って – doctorlove