最小ヒープの C++ コードを作成しようとしています。ポインターのベクトルを作成し、それらが適切に削除されていることを確認したいと考えています。
ポインターのベクトルを作成できますが、デフォルトのコンストラクターから無効な変換エラーが発生します。これはなぜですか?
また、メモリの問題がないことを確認するために、ユーザー定義のデストラクタを作成しようとしています。ただし、ポインターが割り当てられていないというエラーが発生する理由がわかりません。
#include <vector>
#include <iostream>
struct A
{
A(int av, int bv):a(av),b(bv){}
int a, b;
};
struct Heap
{
Heap() : ptr(new std::vector<A*>()) {} //WHY AM I GETTING AN ERROR FOR THE DEFAULT CONSTRUCTOR AND NOT THE CONSTRUCTOR BELOW?
//ERROR: invalid conversion from ‘std::vector<A*, std::allocator<A*> >*’ to ‘long unsigned int’
//ERROR: initializing argument 1 of ‘std::vector<_Tp, _Alloc>::vector(size_t, const _Tp&, const _Alloc&) [with _Tp = A*, _Alloc = std::allocator<A*>]’
Heap(std::vector<A*> p) : ptr(p) { //Works fine.
makeHeap();
}
~Heap(){ //I DON'T UNDERSTAND WHY I AM GETTING A MEMORY ERROR HERE
std::vector<A*>::iterator it;
for(it=ptr.begin(); it<ptr.end(); ++it)
{
delete *it;
*it=NULL;
}
}//ERROR: malloc pointer being freed was not allocated
void makeHeap()
{ //some code }
std::vector<A*> ptr;
std::vector<int> heapLoc;
};
int main()
{
A a0(2,5), a1(4,2);
std::vector<A*> aArray;
aArray.push_back(&a0);
aArray.push_back(&a1);
Heap h(aArray);
return 0;
}