导致分段错误的链表函数
Linked list function causing segmentation fault
该函数的用途是用于C库中的qsort函数。仅当两个集合具有相同数量的元素时,下面的函数才有效。但是,如果其中一个集合的元素少于另一个集合(并且值连续匹配),我的函数似乎会出现分段错误。我相信原因是当下一个节点可能为空时,我正在递归调用下一个节点。
int cmp(const void *a, const void *b){
Node *pa = (Node*)a;
Node *pb = (Node*)b;
if (pa->val == pb->val)
cmp( pa->next, pb->next );
else if (pa->val < pb->val)
return -1;
else
return 1;
return 0; // placeholder
}
但是我可能是错的,上面的函数正确吗?
您根本没有检查节点是否为 NULL。你必须在函数开始时检查它。
if(pa == NULL || pb == NULL)
return 0;
该函数的用途是用于C库中的qsort函数。仅当两个集合具有相同数量的元素时,下面的函数才有效。但是,如果其中一个集合的元素少于另一个集合(并且值连续匹配),我的函数似乎会出现分段错误。我相信原因是当下一个节点可能为空时,我正在递归调用下一个节点。
int cmp(const void *a, const void *b){
Node *pa = (Node*)a;
Node *pb = (Node*)b;
if (pa->val == pb->val)
cmp( pa->next, pb->next );
else if (pa->val < pb->val)
return -1;
else
return 1;
return 0; // placeholder
}
但是我可能是错的,上面的函数正确吗?
您根本没有检查节点是否为 NULL。你必须在函数开始时检查它。
if(pa == NULL || pb == NULL)
return 0;