我在可擴展數組上寫了我的第一個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