我遇到以下錯誤。向量相關的內存分配問題
- 我有一個類
Foo
。此類的實例存儲在class B
的std :: vectorvec
中。 - 在Foo類中,我通過使用
new
分配內存並刪除~Foo()
中的對象來創建類A的實例。
代碼編譯,但我在運行時崩潰。如果我從Foo
類的desstructor中禁用delete my_a
。代碼運行正常(但會出現內存泄漏)。
有人能解釋一下這裏出了什麼問題,並提出修復建議嗎?
謝謝!
class A{
public:
A(int val);
~A(){};
int val_a;
};
A::A(int val){
val_a = val;
};
class Foo {
public:
Foo();
~Foo();
void createA();
A* my_a;
};
Foo::Foo(){
createA();
};
void Foo::createA(){
my_a = new A(20);
};
Foo::~Foo(){
delete my_a;
};
class B {
public:
vector<Foo> vec;
void createFoo();
B(){};
~B(){};
};
void B::createFoo(){
vec.push_back(Foo());
};
int main(){
B b;
int i =0;
for (i = 0; i < 5; i ++){
std::cout<<"\n creating Foo";
b.createFoo();
std::cout<<"\n Foo created";
}
std::cout<<"\nDone with Foo creation";
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
謝謝尼爾。那麼我應該如何創建類A的實例呢?代碼片段將非常感謝。另外,如何複製構造函數和賦值運算符代碼。非常感謝 – memC 2010-04-27 09:27:05
尼爾你有一個錯字...新的A(F。my_a); - > new A(* f.my_a); – TimW 2010-04-27 09:37:26
嗨尼爾,非常感謝代碼片段。實際上,我想在將Foo實例放入向量中時將'int val'傳遞給'my_a'。我怎麼做? - >我想要這樣的東西:(當然它不起作用)'vec.push_back(Foo():my_a(40)' – memC 2010-04-27 09:43:16