我一直在使用C++編寫項目,通常我不會在分段錯誤方面遇到太多麻煩,但我是C++的新手。基本上,我做了一個指向IntList的指針,並調用prepend()從指針創建一個IntList。問題是prepend被調用時,它被卡在頭文件的某處,justd退出。我不知道是什麼導致了這一點,gdb告訴我它只是卡在頭上。幫助將非常感激,就像提示或線索我做錯了什麼。謝謝。這是爲什麼導致分段錯誤?
IntList.h:
#ifndef _INTLIST_H
#define _INTLIST_H
#include <string>
#include <cstring>
using namespace std;
class EmptyIntList;
class IntList
{
public:
static IntList *emptyList();
//static IntList *fromString(string s);
virtual bool isEmpty();
IntList *prepend(int n);
virtual int head();
virtual IntList *tail();
string toString();
// virtual int length();
// virtual IntList *append(IntList *lst);
// virtual int operator[](int n);
// virtual ~IntList();
protected:
IntList();
IntList(IntList &);
// const IntList &operator=(const IntList &);
private:
int data;
IntList *rest;
};
IntList *operator+(IntList &lst1, IntList &lst2);
ostream &operator<<(ostream &outStream, IntList *lst);
ostream &operator<<(ostream &outStream, IntList &lst);
#endif
IntList.cpp:
#include "IntList.h"
#include "EmptyIntList.h"
#include <sstream>
IntList::IntList(){}
IntList *IntList::emptyList(){
return ((IntList*)EmptyIntList::emptyList());
}
bool IntList::isEmpty(){
return false;
}
IntList *IntList::prepend(int n){
IntList *x;
IntList y;
*x = y;
y.data = n ;
y.rest = x ;
return x;
}
int IntList::head(){
return data;
}
IntList *IntList::tail(){
return rest;
}
testIntList.cpp:
int main()
{
int n;
IntList *x;
n=6;
x->prepend(n);
// cout << x->toString();
return 0;
}
GDB步步:
8 int main()
(gdb) step
12 n=6;
(gdb)
14 x->prepend(n);
(gdb)
IntList::prepend (this=0x0, n=6) at IntList.cpp:30
30 IntList y;
(gdb)
IntList (this=0x7fff93ecb3c0) at IntList.cpp:12
12 IntList::IntList(){}
(gdb)
IntList::prepend (this=0x0, n=6) at IntList.cpp:32
32 *x = y;
(gdb)
IntList::operator= (this=0x401650) at IntList.h:18
18 {
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x0000000000401361 in IntList::operator= (this=0x401650) at IntList.h:18
18 {
你說你是C++新手?我會推薦[一本很好的C++入門書](http://stackoverflow.com/q/388242/46642)。是的,我對每個新手都說:) –