View Single Post
Old May 14th, 2007, 4:06 AM   #1
rwm
Professional Programmer
 
Join Date: Jan 2007
Location: Cape Town
Posts: 291
Rep Power: 2 rwm is on a distinguished road
dynamic array problem

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!
rwm is offline   Reply With Quote