"malloc"を使用してメモリを割り当て、 "free"を使用してメモリを割り当てないサンプルプログラムを試しています... "new"そしてセグメンテーション違反私は '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」を印刷すると、問題がはっきりとわかるはずです。 –