独自のバージョンのベクターをC++で実装しようとしています。 これまでのところ、私はC++でベクタを実装しているときにランタイムエラーが発生する
#include<iostream>
#include<string>
using namespace std;
template<class T>
class vec
{
public:
T *a;
int i,N;
vec(int N=0):N(N)
{
i=-1;
a=(T *)malloc(N*sizeof(T));
}
void push_back(const T& t);
T at(const int& index) const;
};
template<class T>
void vec<T>::push_back(const T& t)
{
if(++i==N)
{
a=(T *)realloc(a,(++N)*sizeof(T));
}
a[i]=t;
}
template<class T>
T vec<T>::at(const int& index) const
{
return a[index];
}
int main()
{
vec<string> v;
v.push_back("2");
v.push_back("1");
v.push_back("3");
cout<<v.at(0)<<endl;
return 0;
}
。これを行っている。しかし、私はこの を実行したときに、私は、実行時エラーを取得していますどこに上記のコードではエラーがありますか? 私はC++とVisual Studioを使用して実行しています。
deleteとmallocは一緒に実行されません。あなたは自由であるか新しいかを望みます – UKMonkey
'malloc'(と' realloc')関数は*メモリにのみ割り当てます。彼らはコンストラクタを呼び出さない。 'malloc'を使ってコンストラクタを持つオブジェクトにメモリを割り当てると、すべてのオブジェクトを手動で調べて明示的に構築しない限り、うまく動作しません。 –
どうすればいいですか? – MysticForce