首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分段故障11链表节点结构

分段故障11链表节点结构
EN

Stack Overflow用户
提问于 2013-07-18 14:59:33
回答 5查看 3.8K关注 0票数 0
代码语言:javascript
复制
#include<iostream>
using namespace std;
class list
{
public:
    list();
    bool insertHead(int n);
private:
    struct node
    {
        int item;
        node *next;
    };
    node* head;
    };


list::list()
{
    head = NULL;
    head -> item = 0;
    head -> next = NULL;
}

bool list::insertHead(int n)
{
    node* tempptr = new node;
    tempptr->item = n;
    tempptr->next = head;
    head = tempptr;
    return true;
}

    int main()
    {
            list test1;
            test1.insertHead(4);

            return 0;
    }

这段代码编译得很好,但不幸的是在运行时出现了分段错误。我尝试在insertHead函数的末尾添加delete tempptr,但是没有用。我很不擅长内存分配,我知道分段错误与运行时的内存分配有关。有人能帮我吗?我只是使用insertHead在链表的前面插入一个整数。有人能帮我吗?谢谢!我将实现和其他文件组合在一起,这样更容易阅读……我想。谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-18 15:02:26

你真的对这段代码崩溃感到惊讶吗?

代码语言:javascript
复制
head = NULL;
head -> item = 0;
head -> next = NULL;

您将NULL赋值给一个指针并立即引用它。

票数 0
EN

Stack Overflow用户

发布于 2013-07-18 15:02:06

代码语言:javascript
复制
    head = NULL;
    head -> item = 0;
*** segmentation fault, beacuse head is null, can't dereference
    head -> next = NULL;
票数 2
EN

Stack Overflow用户

发布于 2013-07-18 15:03:29

我建议使用GDB,用这个程序运行gdb。当它分段时,它会给你一个堆栈跟踪,准确地跟踪程序seg出错的位置。然后,您可以使用'p命令‘打印相关变量。Seg错误总是意味着访问您的进程范围之外的内存(具有不在您的进程内的值的指针-无效指针)。学会使用GDB会节省你很多时间,这是一个针对seg错误的insta-fix :-)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17716637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档