Я только начал изучать C++ и пытался перенести некоторый PHP-код на данный момент.Новое в C++, обращенное к segfault
Я получаю Segfault из этого куска кода:
class Color {
public:
// Props
int r;
int g;
int b;
int a;
// Constructor
Color (int r, int g, int b, int a) {
this -> r = r;
this -> g = g;
this -> b = b;
this -> a = a;
};
// Destructor
~Color() {
delete this;
};
// Mix 2 colors
void mixColor (const Color& c) {
this -> r = (this -> r + c.r)/2;
this -> g = (this -> g + c.g)/2;
this -> b = (this -> b + c.b)/2;
this -> a = (this -> a + c.a)/2;
};
};
И в главном файле:
int main() {
Color myColor (10, 20, 30, 40);
return 1;
}
Любая идея, что вызывает это?
Спасибо.
1. не используйте 'delete this;', 2. 'return 1;' -> 'return 0;' или no return whatsoever –
Да, как сказал Петр, 'delete this' является вашим преступником. Вам даже не нужен деструктор этого класса. Я предлагаю вам избавиться от него. – David
Вы также обязательно захотите изменить свой конструктор так, чтобы имена параметров не имели те же имена, что и ваши переменные-члены. Вы указали левую часть задания на то, чтобы указать на переменные-члены, но неясно кому-то, незнакомому с стандартом C++, что «r» будет интерпретироваться как. Это может быть параметр или переменная-член. Возможно, все, что ваш конструктор делает, это назначить переменную-член самому себе, а не параметру. Хотя я не уверен, что диктует стандарт, или если это неопределенное поведение. – Ian