程序触发断点

时间:2016-11-24 17:56:57

标签: c++ templates arraylist

嘿,我无法弄清楚导致程序触发断点的原因。对于学校,我不得不使用模仿java数组列表的模板编写一个类,但是在c ++中。当我只使用我在测试中写过两次以上的push方法时,我的代码似乎有效。如果我尝试将两个以上的值推到arraylist上,它会开始触发断点。

这是我的代码: HeaderFile:

Arraylist.h

#include <string>
using namespace std;
template<class t>
class ArrayList {

public:
    ArrayList();
    void push_back(t m);
    void erase(t m);
    int size();
    string toString();
    t& operator[](unsigned int i);
private:
    int currentIndex;
    int sizeOfArray;
    t *p;
    int currentindex;

};  

ArrayList.cpp

#include "ArrayList.h"
#include <iostream>
using namespace std;
template<class t>
ArrayList<t>::ArrayList() {
    p = new t[1];
    sizeOfArray = 1;
    currentIndex = 0;
    p[currentIndex] = 0;
    currentIndex++;

}

template<class t>
int ArrayList<t>::size() {
    return sizeOfArray;
}

template<class t>
void ArrayList<t>::erase(t m) {
    int location = 0;
    for (int i = 0; i < currentIndex; i++) {
        if (p[i] == m) {
            location = i;
        }
    }

    for (int i = location; i < currentIndex - 1; i++) {
        p[i] = p[i + 1];
    }
    currentIndex--;
}

template<class t>
void ArrayList<t>::push_back(t m) {
    if (currentIndex < sizeOfArray-1) {
        t *temp = new t[sizeOfArray + 1];
        sizeOfArray++;

        for(int i=0;i<sizeOfArray-1;i++){
        temp[i] = p[i];
        }
    temp[currentIndex] = m;
    currentIndex++;
    sizeOfArray++;

    delete [] p;
    t *p = new t[sizeOfArray];

    p = temp;

    delete [] temp;
}
    else {
        p[currentIndex] = m;
        currentIndex++;

    }
}

template<class t>
t& ArrayList<t>::operator[](unsigned int i) {
    return p[i];
}

template<class t>
string ArrayList<t>::toString() {
    string output = "";
    for (int i = 0; i < sizeof(p); i++) {
        output += to_string(p[i]);

    }
    return output;
}

Source.cpp(仅将其用作测试的暂存器)

#include "ArrayList.cpp"
#include <iostream>
using namespace std;

int main()
{
    ArrayList<double> list = ArrayList<double>();
    list.push_back(1.0);
    list.push_back(2.0);
    list.push_back(3.0);
    //list.push_back(4.0);

    cout << list.toString();

    cin.get();
    return 0;
}

我相信这个问题与我的某个方面有关,但是我似乎无法解决这个问题(或许我刚刚过去了)长期盯着这个任务)。任何帮助或建议都将一如既往地受到赞赏。

0 个答案:

没有答案