Hey guys!
I'm trying to write a dynamic array. I was thinking of using the std STL library, but then I thought that if I write this then i'll understand better...
well, i honestly can't understand why it doesnt work:
#pragma once
typedef unsigned int uint;
template<typename T>
class DynamicArray {
public:
//constructors
DynamicArray() {
size = 0;
data = 0;
}
DynamicArray(const DynamicArray &src) {
if(src.data) {
size = src.size;
data = new T[size];
//copy data
T *p = &src.data[0];
T *q = &data[0];
while(*p)
*q++ = *p++;
} else {
size = 0;
data = 0;
}
}
//destructors
~DynamicArray() {
delete[] data;
}
///...
//methods
void Append(const T &t) { //append item to end
if(data) {
T *tmp = &data[0];
size++;
data = new T[size];
//copy old data
T *p = &tmp[0];
T *q = &data[0];
while(*p)
*q++ = *p++;
*q = t;
//free old mem
delete[] tmp; /// causing problems
} else {
size = 1;
data = new T(t);
}
}
void Remove() { //remove item at end
if(data) {
T *tmp = &data[0];
size--;
data = new T[size];
//copy old data
T *p = &tmp[0];
T *q = &data[0];
while(*q)
*q++ = *p++;
//free old mem
delete[] tmp;
} else
throw int(99); ///throw Exception("array is empty",__FILE__,__LINE__);
}
//data
private:
//data
uint size;
T *data;
protected:
//data
}; //class DynamicArray
#include <iostream>
using namespace std;
#include "DynamicArray.h"
int main() {
DynamicArray<float> arr;
int i;
for(i=0; i<50; i++) {
cout << "appending " << i << endl;
arr.Append((float)i);
}
return 0;
}
it crashes about halfway. the allocation seems very inconsistent
hope you can help me out! many thanks!
