C 使用数组指针对结构进行排序不起作用
我正在创建两个结构:甲板和卡片。我想使用qsort对卡片组中的卡片进行排序,但这不起作用。当我运行时,会出现一个异常:分段错误。 按照我的代码:C 使用数组指针对结构进行排序不起作用,c,struct,quicksort,qsort,C,Struct,Quicksort,Qsort,我正在创建两个结构:甲板和卡片。我想使用qsort对卡片组中的卡片进行排序,但这不起作用。当我运行时,会出现一个异常:分段错误。 按照我的代码: typedef struct Card { int value; }Card; typedef struct Deck{ Card *c[100]; int top; }Deck; Card * newCard(int value) { Card * aux = (Card *)malloc(sizeof(Card));
typedef struct Card {
int value;
}Card;
typedef struct Deck{
Card *c[100];
int top;
}Deck;
Card * newCard(int value) {
Card * aux = (Card *)malloc(sizeof(Card));
aux->value = value;
return aux;
}
Deck * newDeck() {
Deck * deck = (Deck *)malloc(sizeof(Deck));
deck->top = 0;
return deck;
}
void addCard(Deck *b, Card *c) {
b->top++;
b->c[b->top] = c;
}
int compare(const void *x, const void *y) {
Card * xa = *(Card **) x;
Card * ya = *(Card **) y;
if(xa->value == ya->value)
return 0;
if(xa->value > ya->value)
return 1;
return -1;
}
void sort(Deck *b) {
qsort(b->c, b->top, sizeof(struct Card*), compare);
}
int main() {
Deck * b = newDeck();
addCard(b,newCard(11));
addCard(b,newCard(12));
addCard(b,newCard(11));
addCard(b,newCard(1));
addCard(b,newCard(1));
sort(b);
return 0;
}
有人能帮我吗?我只想对牌组中的牌进行排序,但逻辑有问题。可能类似指针(malloc或calloc?)。Hm……您的代码看起来像是“填空”,因为您尚未发布完整的代码,并且发布的代码是正确的。因此,我以某种方式完成了您的代码:
#include <stdio.h>
#include <stdlib.h>
// Your code
typedef struct Card {
int value;
}Card;
typedef struct Deck{
Card *c[100];
int top;
}Deck;
int compare(const void *x, const void *y) {
Card* xa = *(Card **) x;
Card* ya = *(Card **) y;
if(xa->value == ya->value)
return 0;
if(xa->value > ya->value)
return 1;
return -1;
}
void sort(Deck *b) {
qsort(b->c, b->top, sizeof(struct Card*), compare);
}
// My main
int main() {
Deck d;
d.c[0] = calloc(1, sizeof(Card));
d.c[0]->value = 5;
d.c[1] = calloc(1, sizeof(Card));
d.c[1]->value = 1;
d.c[2] = calloc(1, sizeof(Card));
d.c[2]->value = 3;
d.top = 3;
sort(&d);
printf("%d %d %d", d.c[0]->value, d.c[1]->value, d.c[2]->value);
return 0;
}
当您添加卡时,您的
积分位于需要添加卡的位置。所以你需要在添加后增加它。请记住,您还需要为它添加检查,以防止溢出Deck->c
Hm….您的代码看起来像是“填空”,因为您尚未发布完整的代码,并且发布的代码是正确的。因此,我以某种方式完成了您的代码:
#include <stdio.h>
#include <stdlib.h>
// Your code
typedef struct Card {
int value;
}Card;
typedef struct Deck{
Card *c[100];
int top;
}Deck;
int compare(const void *x, const void *y) {
Card* xa = *(Card **) x;
Card* ya = *(Card **) y;
if(xa->value == ya->value)
return 0;
if(xa->value > ya->value)
return 1;
return -1;
}
void sort(Deck *b) {
qsort(b->c, b->top, sizeof(struct Card*), compare);
}
// My main
int main() {
Deck d;
d.c[0] = calloc(1, sizeof(Card));
d.c[0]->value = 5;
d.c[1] = calloc(1, sizeof(Card));
d.c[1]->value = 1;
d.c[2] = calloc(1, sizeof(Card));
d.c[2]->value = 3;
d.top = 3;
sort(&d);
printf("%d %d %d", d.c[0]->value, d.c[1]->value, d.c[2]->value);
return 0;
}
当您添加卡时,您的积分位于需要添加卡的位置。所以你需要在添加后增加它。请记住,您还需要为它添加检查,以防止溢出Deck->c
请提供一个复制问题的最小编译示例。您的代码不完整。请添加完整代码。在我的头顶上,你正在访问卡片
中的卡片
,而没有分配它……b->top++;b->c[b->top]=c代码>在添加变量后而不是之前增加变量。请提供一个复制问题的最小编译示例。您的代码不完整。请添加完整代码。在我的头顶上,你正在访问卡片
中的卡片
,而没有分配它……b->top++;b->c[b->top]=c代码>在添加后而不是之前增加变量。