taozhenJ 2024-08-23 08:22 采纳率: 43.8%
浏览 4
已结题

链表求最大公约数(C++)


int gcd(int a, int b)
{
    if(b == 0) return a;
    return gcd(b, a % b);
}

ListNode *insert(ListNode* head) 
{
    ListNode *p = head;
    while(p != nullptr) 
    {
        ListNode *node = new ListNode(gcd(p->val, p->next->val));
        node->next = p->next;
        p->next = node;
        p = node->next;
    }
    return head;
}

Segmentation Fault了!

  • 写回答

1条回答 默认 最新

  • 阿里小阿希 2024-08-23 09:11
    关注

    访问空指针:当p指向链表的最后一个节点时,p->next将是nullptr。此时,调用gcd(p->val, p->next->val)会导致解引用空指针,从而引发段错误。解决方案:在调用gcd之前,确保p->next不是nullptr。

    ListNode *insert(ListNode* head) 
    {
        if (head == nullptr) return nullptr; // 处理空链表的情况
    
        ListNode *p = head;
        while(p->next != nullptr) // 确保不会在最后一个节点处调用gcd
        {
            int val = gcd(p->val, p->next->val);
            ListNode *node = new ListNode(val);
            if (node == nullptr) {
                // 处理内存分配失败的情况
                // 这里可以添加错误处理逻辑,例如释放已分配的内存,返回错误代码等
                return nullptr;
            }
            node->next = p->next;
            p->next = node;
            p = node->next;
        }
        return head;
    }
    
    
    

    如果修改后的代码仍然出现段错误,那么可能需要更详细的信息来定位问题。您可以使用调试工具(如gdb或valgrind)来获取调用栈信息,查看在哪个具体的操作步骤中发生了段错误。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月8日
  • 已采纳回答 8月31日
  • 创建了问题 8月23日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?