我在可扩展数组上写了我的第一个C++模板代码,并且出现了分段错误!经过一小时的调试,我意识到我需要帮助。我认为构造函数或析构函数有问题但不确定。分段错误C++模板
该代码在准备好编译的pastie上。 http://pastie.org/1150617
/* Expandable array in C++ */
#include <iostream>
using namespace std;
template <class T>
class EArray{
private:
T* arr;
int size;
public:
EArray(int l);
~EArray();
void setElement(int i, const T& newval);
void eraseElement(int i);
void addElement(int i, const T& newval);
void push(const T& newval);
void display();
};
template <class T>
EArray<T>::EArray(int l){
size = l;
}
template <class T>
EArray<T>::~EArray(){
delete [] arr;
arr = NULL;
}
template <class T>
void EArray<T>::setElement(int i, const T& newval){
if(i < size && i >= 0){
arr[i] = newval;
}
}
template <class T>
void EArray<T>::eraseElement(int index){
size -= 1;
T* newarr = new T[size];
for (int i = 0; i < size+1; i++){
if (i < index){
newarr[i] = arr[i];
}
else if(i > index){
newarr[i-1] = arr[i];
}
}
delete [] arr;
arr = newarr;
}
template <class T>
void EArray<T>::addElement(int index, const T& newval){
size += 1;
T* newarr = new T[size];
for(int i = 0; i < size; i++){
if(i<index){
newarr[i] = arr[i];
}
else if (i == index){
newarr[i] = newval;
}
else{
newarr[i] = arr[i-1];
}
}
delete [] arr;
arr = newarr;
}
template <class T>
void EArray<T>::push(const T& newval){
size += 1;
T * newarr = new T[size];
for (int i = 0; i < size-1; i++){
newarr[i] = arr[i];
}
newarr[size-1]=newval;
delete [] arr;
arr = newarr;
}
template <class T>
void EArray<T>::display(){
for(int i = 0; i < size; i++){
cout << arr[i] << endl;
}
}
int main(){
EArray<int> A(6);
A.setElement(0,34);
A.setElement(1,544);
A.setElement(2,32);
A.setElement(3,324);
A.setElement(4,24);
A.display();
A.addElement(3,12);
A.display();
A.eraseElement(4);
A.display();
A.push(32456);
A.display();
}
你从哪里得到分段错误?你是否将一个调试器附加到你的程序中以查看它崩溃时的错误?你是否将代码减少到了重现问题所需的最小值? – 2010-09-10 18:04:48
詹姆斯的问题是每当试图分析段错误时都应该回答的问题。 +1。 – CanSpice 2010-09-10 18:07:18
我想我必须学习使用调试器。 – zubinmehta 2010-09-10 18:26:55