繁体   English   中英

C++ 中链表的错误“来自 abort(3) (sigabrt) 的中止信号”

[英]Error "Abort signal from abort(3) (sigabrt) " for linked list in C++

以下代码用于基本循环链表,但是当输入一个较大的 n 值(例如 8 位数字)时,它会抛出“来自 abort(3) (sigabrt) 的中止信号”错误。 我不确定这意味着什么,并且希望得到一些关于如何针对我的代码修复此问题的指导。 谢谢!

#include<bits/stdc++.h> 
using namespace std; 

//First I created a structure for a node in a circular linked list
struct Node 
{ 
    int data; 
    struct Node *next; 
}; 

// function to create a new node
Node *newNode(int data) 
{ 
Node *temporary = new Node; 
temporary->next = temporary; 
temporary->data = data; 
return temporary; 
} 

// This function finds the last man standing in
//the game of elimination
void gameOfElimination(int m, int n) 
{ 
    //first I created a circular linked list of the size which the user inputted 
    Node *head = newNode(1); 
    Node *prev = head; 
    //this loop links the previous node to the next node, and so on.
    for (int index = 2; index <= n; index++) 
    { 
        prev->next = newNode(index); 
        prev = prev->next; 
    } 
    prev->next = head; //This connects the last and first nodes in our linked list together. 

    //when only one node is left, which is our answer:
    Node *ptr1 = head, *ptr2 = head; 
    while (ptr1->next != ptr1) 
    { 

        int count = 1; 
        while (count != m) 
        { 
            ptr2 = ptr1; 
            ptr1 = ptr1->next; 
            count++; 
        } 

        /* Remove the m-th node */
        ptr2->next = ptr1->next; 
        ptr1 = ptr2->next; 
    } 

    printf ("%d\n ", 
            ptr1->data);
} 

//main program which takes in values and calls the function:
int main() 
{ 
    int n, p;
    cin>>n>>p;
    int m=p+1;
    gameOfElimination(m, n); 
    return 0; 
} 

SIGABRT 通常在出现内存问题时发出(堆损坏很常见)。 在您的代码中,我只看到调用了 new() 运算符,但您并未从链表中删除任何未使用的节点! 似乎您正在耗尽分配给您的进程的内存。

您可能内存不足。 在程序执行期间检查您的 ram 使用情况,这可能会导致某些问题。

enter code here
#include<bits/stdc++.h>
using namespace std;

class Node{
 public: 
  int data;
  Node *next;

};

void traverse(Node *head)
{
    while (head != NULL)
    {
        /* code */
        cout<<head->data<<"->";
        head = head->next;
    }
    cout<<"NULL"
}

int main()
{
     Node *head = new Node();
     Node *second = new Node();;
     Node *third = new Node();;
     Node *fourth = new Node();;
     
     head->data = 5;
     head->next = second;
     //cout<<head->data;
     second->data=10;
     second->next=third;

     third->data = 15;
     third->next = fourth;

     fourth->data = 20;
     fourth->next= NULL;

    traverse(head);

     return 0;
}```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM