VSCode运行链表求和代码出现Segmentation Fault,在线GDB却正常?
问题原因分析及修复方案
核心 Segmentation Fault 原因:未终止的链表
你的代码中最直接导致段错误的问题是链表没有正确终止。在main函数里,你创建了third1和third2节点,但没有将它们的next指针设置为NULL。这意味着:
- 当遍历链表到
third1时,temp1->next会指向一块未初始化的垃圾内存(不是NULL) - 循环条件
temp1 != NULL && temp2 != NULL会继续成立,导致代码尝试访问temp1->val(无效内存地址),触发段错误
在线GDB能运行是因为部分在线环境的malloc会默认将分配的内存初始化为0,此时third1->next恰好是NULL,让循环正常终止。但这属于未定义行为,不可依赖。
其他代码问题
错误的
free()调用:
你在函数末尾调用free(temp1)和free(temp2),但这两个指针是传入链表的节点指针。直接释放它们会破坏原链表的内存,且如果链表长度不一致,可能会释放NULL以外的无效指针(虽然free(NULL)是安全的,但逻辑上完全错误)。整数溢出风险:
使用int类型存储l1sum、l2sum和i,当链表长度超过9个节点时,i会变成1e9,乘以节点值后很容易超出32位int的最大值(约2e9),导致溢出和未定义行为。
修复后的代码
#include <stdlib.h> #include <stdio.h> struct ListNode { int val; struct ListNode *next; }; void addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ // 使用long long避免整数溢出 long long l1sum = 0, l2sum = 0; long long i = 1; struct ListNode * temp1 = l1; struct ListNode * temp2 = l2; while(temp1 != NULL && temp2 != NULL) { l1sum += temp1->val * i; l2sum += temp2->val * i; i = i * 10; temp1 = temp1->next; temp2 = temp2->next; } printf("l1sum: %lld\n", l1sum); printf("l2sum: %lld\n", l2sum); } int main() { struct ListNode * head1 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode * head2 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode * second1 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode * second2 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode * third1 = (struct ListNode *)malloc(sizeof(struct ListNode)); struct ListNode * third2 = (struct ListNode *)malloc(sizeof(struct ListNode)); head1->val = 2; second1->val = 4; third1->val = 3; head1->next = second1; second1->next = third1; // 终止链表 third1->next = NULL; head2->val = 5; second2->val = 6; third2->val = 4; head2->next = second2; second2->next = third2; // 终止链表 third2->next = NULL; addTwoNumbers(head1, head2); // 记得释放所有链表节点,避免内存泄漏 free(head1); free(second1); free(third1); free(head2); free(second2); free(third2); return 0; }
内容的提问来源于stack exchange,提问作者Shadi Aridi
相关产品推荐
相关产品推荐

