Im folgenden Programm beabsichtige ich, char* lineInhalte von einem Objekt auf ein anderes durch zu kopieren strcpy. Wenn das Programm jedoch endet, obj2funktioniert der Destruktor von einwandfrei, der objAbsturz jedoch nicht. gdb zeigt unterschiedliche Adressen linefür beide Objekte an.
class MyClass {
public:
char *line;
MyClass() {
line = 0;
}
MyClass(const char *s) {
line = new char[strlen(s)+1];
strcpy(line, s);
}
~MyClass() {
delete[] line;
line = 0;
}
MyClass &operator=(const MyClass &other) {
delete[] line;
line = new char[other.len()+1];
strcpy(line, other.line);
return *this;
}
int len(void) const {return strlen(line);}
};
int main() {
MyClass obj("obj");
MyClass obj2 = obj;
MyClass obj1; MyClass obj2 = obj1;Nebenbei bemerkt , sobald Sie einen Kopierkonstruktor hinzugefügt haben : wird immer noch segfault, weil Sie aufrufen, strlen(obj1.line)welches ist strlen(NULL). Wie würde MyClass obj1; obj1.len();.
MyClass obj1; obj1.len(); Es ist undefiniertes Verhalten, strleneinen Nullzeiger aufzurufen .