更新:str1の新しいデータ用に割り当てられたメモリ。メモリエラーです。書き換え+ =演算子C++
作成した文字列クラスに対して+ =メソッドを書き直そうとしています。
メインクラスで次にClass mystring{
public:
friend void operator+=(mystring& str1, const mystring& str2){
mystring temp;
delete[] temp.data;
temp.length = str1.length + str2.length;
temp.data = new char[temp.length + 1];
strcpy(temp.data, str1.data);
strcat(temp.data, str2.data);
delete[] str1.data;
str1.length = temp.length;
strcpy(str1.data, temp.data);
}
private:
char *data;
int length;
}
:それがあるべきよう
mystring str1("hi");
mystring str2("matt");
str1 += str2;
cout << str1 << endl;
この機能が働いているが、私はvalgrindのを実行したときに私はすべての上にメモリエラーを取得しています。私はそれがなぜあるのか理解できません。もし誰かが私にすごくすばらしいヒントを与えることができたら。あなたはstr1
に追加のメモリを割り当てる必要があり
おかげ
は、なぜあなたは、車輪を再発明していますか? – SLaks
valgrindに表示されている関連エラーとコンストラクタコードを入れてください。 – Arunmu
スワップメソッドを定義する必要があることに注意してください。最初にtemp.dataを削除する必要がないように、おそらく特別なミストルのコンストラクタが必要です。あなたは長さを知っているのでmemcpyを使うべきです:strcpyとcatは無駄です。 tempを作成した後のスワップメソッドでは、新しい文字列をスワップするだけです(* this、temp)。スワップはポインタと長さを入れ替えるだけです。 –