gpt4 book ai didi

c++ - 为什么这会导致段错误?

转载 作者:行者123 更新时间:2023-11-28 08:16:14 27 4
gpt4 key购买 nike

我一直在用 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 {

最佳答案

IntList *x;

这是未初始化的,它指向的值也是未初始化的。

关于c++ - 为什么这会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7668783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com