我需要編寫一個程序,其中,I必須與元素,其中存儲器是動態分配創建類。當我動態地創建我的課(M1和M2)的兩個實例,使M1的副本(代碼:M1 = M2),編譯器說了下:指針被釋放沒有被分配(創建類的動態複印件)
C++(11253,0x100084000) malloc: *** error for object 0x1002000b0:
pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Program ended with exit code: 9
這裏是我的類:
class CharArray {
private:
char *array;
public:
//Конструкторы
CharArray() {
array=new char[1];
}
CharArray(char *str) {
array=new char[strlen(str)];
strcpy(array, str);
}
CharArray(const CharArray &a) {
array=new char[strlen(a.array)];
strcpy(array, a.array);
}
//Деструктор
~CharArray() {
delete [] array;
//cout << "Сработал деструктор!" << endl;
}
//Остальные методы
//Выводит на экран содержимое массива
void ShowArray();
//Ввод данных в массив
void EnterString();
//Вывод информации о массиве
void InfoAboutArray();
int SayLength();
CharArray operator+(CharArray &secondArray) const;
//CharArray& operator=(const CharArray &a);
CharArray& operator=(const char *a);
//Делаем большие буквы мальнькими и наоборот
void UpperCaseToLowerAndLowerCaseToUpper();
//Делаем маленькие буквы большие
void AllUpperCase();
//Делаем большие буквы маленькими
void AllLowerCase();
//Перегрузка операторов new и delete
void* operator new(size_t size);
void operator delete(void *p);
void* operator new[](size_t size);
void operator delete[](void *p);
};
這裏是我的主:
int main(int argc, const char * argv[]) {
char m[16]="Hello, World!!!";
CharArray *m1;
cout << "Динамическое создание экземпляра класса, его инициализация строкой \"Hello, World!!!\" и вывод содержимого экземпляра на экран:" << endl;
m1=new CharArray(m);
m1->ShowArray();
cout << "Создание динамической копии экземпляра класса" << endl;
CharArray *m2;
m2=m1;
cout << "Вывод содержимого копии экземпляра на экран:" << endl;
m2->ShowArray();
delete m1;
delete m2;
return 0;
}
如何解決這個問題呢?
使用'的std :: VECTOR'或'的std :: string' – user463035818
在你的構造函數,你沒有分配足夠的:'陣列=新的char [(STR)+1的strlen]'應被使用,而不是' 'strcpy'之前的數組=新字符[strlen(str)]'。 – Franck
爲什麼你動態地分配在其構造函數中動態分配數組的對象?至少你的主要你可以保留'新'和'刪除' – user463035818