Я пытаюсь попробовать программу, в которой я выделяю память с помощью «malloc» и выделяю память с помощью «free» ... Я знаю, что использование «нового» и «удалить» это правильный путь, но я просто хочу, чтобы понять ....Нарушение сегментации, в то время как я освобождаю память с помощью «free»
я получаю аварии «нарушение сегментации», но я не мог понять, почему ...
class Object{
public:
Object(){
this->def = 10;
std::cout<<"Object Constructed"<<std::endl;
}
~Object(){
std::cout<<"Object Destructed"<<std::endl;
}
void amIPresent(){
std::cout<<"Yes Object is Present, Defaulter is "<<this->def<<std::endl;
}
private:
int def;
};
int main(){
std::cout<<"Using malloc to Construct Object"<<std::endl;
Object *o = static_cast<Object*>(malloc(sizeof(Object)));
Object o2;
o = &o2;
std::cout<<"Freeing Memory using \"free\""<<std::endl;
o->amIPresent();
free(o);
return 0;
}
Выход:
Using malloc to Construct Object
Object Constructed
Freeing Memory using "free"
Yes Object is Present, Defaulter is 10
Segmentation fault
Вы никогда не должны выделять объекты с помощью 'malloc' таким образом! Не вызывать конструктор - это только первая часть проблемы, которую вы будете иметь. Если вы хотите динамически создать новый объект, используйте 'new'. –
Кроме того, в будущем, если вы снова получите что-то вроде сбоя сегментации или других сбоев, сначала следует использовать отладчик, чтобы узнать, что происходит, и изучить переменные. Если вы перешли все заявления и напечатали 'o' на каждом шагу, вы бы поняли проблему довольно четко. –