c - C:链表段错误。虽然条件无法评估以检查 NULL
问题描述
我正在尝试检查列表中重复值的链接列表,但由于某种原因,我不断收到段错误。
这是我为检查重复数字而编写的函数:
void dup_checker(t_stack *stack, int value)
{
int counter;
counter = 0;
while (stack)
{
if ((stack->elem == value) && (counter < 3))
counter++;
if (counter == 2)
error_msg();
stack = stack->next;
}
}
程序在这一行失败:
if ((stack->elem == value) && (counter < 3))
我的 dup_checker 中的 while 循环无法获取 NULL 指针。我什至使用 and if 语句进行检查,但仍然失败。if 语句:
if (stack != NULL)
这是我将新值推送到堆栈的函数:
void push(t_stack **curr, const char *elem)
{
t_stack *new;
int value;
digit_checker(elem);
value = ft_atoi(elem);
if (!(new = (t_stack *)malloc(sizeof(t_stack))))
return ;
new->elem = value;
new->next = (*curr);
new->index = 1;
(*curr) = new;
dup_checker((*curr), value);
}
这是我的主要功能:
int main(int ac, char **av)
{
t_stack *stack_a;
t_stack *stack_b;
if (ac > 1)
{
ac--;
stack_b = NULL;
while (ac > 0)
push(&stack_a, av[ac--]);
//normalizer(&stack_a);
//check_args(&stack_a, &stack_b);
//is_sorted(stack_a, stack_b);
}
return (0);
}
我使用了调试器,这是我得到的结果:
Program received signal SIGSEGV, Segmentation fault.
0x0000555555555a96 in dup_checker (stack=0xe48348e289485ed1, value=2) at sorter.c:57
57 if ((stack->elem == value) && (counter < 3))
我还使用 valgrind 来查找问题,但没有成功。
我之前在 MAC 机器上编写了这段代码,它没有任何问题,但我现在使用的是 Ubuntu,并且遇到了这个问题。有什么解决办法吗?
解决方案
关于:
t_stack *stack_a;
if (ac > 1)
{
ac--;
while (ac > 0)
push(&stack_a, av[ac--]);
变量指针:stack_a
尚未初始化,因此包含该位置的程序堆栈上的垃圾。要修复,建议更换:
t_stack *stack_a;
和
t_stack *stack_a = NULL;
推荐阅读
- linux - 如何在不使用 git 命令的情况下推送
- java - apache sling s3 存储桶
- ionic-framework - 幻灯片图像,从服务器获取,在离子卡中(一次加载一个)
- mongodb - Mongoose Embedded Document,方法“不是函数”
- amazon-dynamodb - 多对多关系:全局二级索引与邻接表
- arrays - 如何在数组中找到连接的组件
- c++ - 为什么会发生堆损坏?
- node.js - 我应该为 nginx/express 中的 https 做什么?
- xamarin - 构建时 Xamarin 实时播放器错误
- typeorm - TypeORM基本连接说明