我已经在这个项目上工作了一段时间,并且已经完全完成。 除了在Linux上运行时,我遇到了分段错误。 我是C ++的初学者,虽然我了解分段错误与尝试访问已释放的内存有关,但是我不了解我要访问的内存出了什么问题。 以下是我遇到问题的功能。 我在注释中标记了我认为引起问题的代码行。 如果您看到我在做什么错,请告诉我,我将非常感谢!

int TsuPod::SortSongList(string x, string y, int z)
{
    Song InsertSong(x, y, z); //creates song object

    node* newNode = new node; //creates new node

    //initializes all the node's values
    newNode->title = InsertSong.GetTitle();
    newNode->artist = InsertSong.GetArtist();
    newNode->size = InsertSong.GetSize();

    //case 1 - Inserting into an empty list
    if(head == NULL)
    {
        head = newNode;
    }
    else
    {
        curr = head;
    prev = NULL;

    //Traverse
    while(curr != NULL)
    {
            if(curr->title >= newNode->title)
        {
            break;
        }
        else
        {
            prev = curr;
            curr = curr->next;
        }
        }
    }   

    if(curr == head)
    {
    //case 2 - Insert at head
    newNode->next = head;
    head = newNode;       //Causing Segmentation fault?
    }
    else
    {
    //case 3 - Insert after the head
    newNode->next = curr;
    prev->next = newNode;
    }

    remainingMem = remainingMem - newNode->size;
    slots++;
    return 1;
}

===============>>#1 票数:1 已采纳

击中我的第一件事是:

if(head == NULL)     <--- lets assume that head was null
{
    head = newNode;  <---- executed
}

else
{                    <---- not executed, skipped
    curr = head;     <---- this is skipped, curr is not assigned to head
    prev = NULL;

    //Traverse
    while(curr != NULL) { ... }
}  

if(curr == head)    <----- Huh... What is curr right now? When was 
                           curr last set to a value 
{ ... }

我并不是说分段错误是由此引起的,我只是说这段代码是可疑的。

  ask by SaigonWhore translate from so

未解决问题?本站智能推荐:

1回复

在链表中按排序顺序插入多个元素时出现分段错误

我试图在链接列表中进行插入排序。 当仅插入一个元素(即第一个元素)时,它执行得很好,但对于多个元素,则会出现分段错误。 谁能告诉我问题出在哪里?
1回复

排序链表但出现分段错误

每当我尝试运行该程序时,当我尝试从最小到最大对链表中的所有数字进行排序时,都会不断出现分段错误,我发现它位于while循环中 我不知道这是怎么了 这是大多数代码,因此您可以在我使用它的地方获得一些上下文
4回复

使用C中的双向链表进行分段错误

我在这里用.h原型编写了一个双链表的实现,一切正常,直到我开始在终端中输入值。 输入第二个值后出现分段错误,但是,如果我仅使用1个值,它将正常执行。 我已经经历了几次,但是,我找不到我的错误。 你们能帮我找到为什么我得到错误吗? 这是.h文件: 这是.c文件:
4回复

分段错误,在C中列出

我试图使用两个函数直接对在链表中输入的数字进行排序,第一个在头部添加元素,第二个包含分段错误的元素应该利用第一个来完成这项工作。
2回复

在链表C的末尾插入时出现分段错误

好的,所以我试图通过逐项添加到末尾来创建项目的链接列表,并且我也想打印出结果。 我只显示我的部分代码(需要处理的部分),因此请忽略此代码段中我没有真正使用的所有库: 它可以很好地编译,但是当我运行它时,我唯一得到的就是“分段错误”。 ???
2回复

使用功能创建链表时出现分段错误

我试图创建一个链表,然后将节点值回显到控制台。 但是在main函数之外使用函数并调用它会导致segmentation fault(core dumped) 。 我不知道为什么。 以下代码有效: 但这会引发细分错误
1回复

遍历链表时出现分段错误

我有一个简单的C ++程序来遍历链表。 它在ideone中运行完美。 当我在Mac终端中运行此程序时,它将引发分段错误。 当我取消注释//printf("Node"); 遍历功能生成的直线完美运行。 我无法理解这种行为。
2回复

While循环的条件语句的条件语句中的C ++分段错误分析了链表的有序插入

这是一个类分配,用于有序插入到已排序的链表中。 我避免访问空指针,并添加了一些调试输出行,以将seg错误缩小为while循环本身的条件语句。 我可以将一个节点添加到空列表中,并将具有较小键的节点添加到列表的开头,但是将键添加到非空列表的末尾时会遇到段错误。 如调试输出所示,有问题的wh
1回复

插入排序链表C ++

我正在尝试使用随机数对填充的链表进行排序。 我所做的功能无法正常工作。 我看不出有什么问题,它没有正确地对数字进行排序。
2回复

圆形双链表-分段错误:11 [关闭]

我正在尝试实现一个循环的双向链表,但我不断遇到分段错误:11错误(我相信是由于添加和删除功能所致)。 我不知道我的代码是否接近,但是我无法克服此错误来正确测试它。 我相信这是我所涉及的代码: (Circular_DLList.cc) 任何帮助都将非常棒,谢谢。