我正在尝试使用qsort按字母顺序排列队列(链表),但是当我运行它时,我遇到了分段错误。我相信问题出在比较函数中,但我没有看到调试它的方法,所以我在这里。
int compare (const void*va, const void*vb)
{
link a=(link)va;
link b=(link)vb;
int criterium_1 = strcmp(a->item->text,b->item->text);
if (criterium_1!=0) return criterium_1;
return (a->item->sender)-(b->item->sender);
}
int list ( Queue list, int sort )
{
Queue q = list ;
link t;
int i=0;
link *sorted = (link*) malloc ( sizeof(link) * list->size );
if ( list == NULL )
{
puts("NULL");
return 0;
}
for ( t = q->head ; t!=NULL ; t=t->next )
{
sorted[i]=t;
i++;
}
if( sort==1 )
qsort( sorted , q->size , sizeof(link), compare );
for ( i=0 ; i<q->size ; i++ )
{
printf("%d %d %s", sorted[i]->item->receiver, sorted[i]->item->sender, sorted[i]->item->text ) ;
}
free(sorted); /* Esta a libertar o que esta la dentro tambem? */
return 0;
}