player_t* getFirstMatch(player_t** sortedPlayers, int playerCount, char* inputString)
{
player_t searchPlayer;
player_t* searchPlayerPointer = &searchPlayer;
searchPlayer.nameLast = inputString;
searchPlayerPointer = (player_t*) bsearch(searchPlayerPointer,
*sortedPlayers, playerCount, sizeof(player_t*),
playerCompareLast);
return searchPlayerPointer;
}
我的程序在使用 bsearch() 的行上出现段错误。我在这里做错了什么?这是我的比较功能。我为 qsort 使用了类似的版本,但现在我需要将这个版本用于 bsearch :
int playerCompareLast(const void *p1, const void *p2)
{
char* nameLast1;
char* nameLast2;
int result;
nameLast1 = (*(player_t **)p1)->nameLast;
nameLast2 = (*(player_t **)p2)->nameLast;
result = strcmp(nameLast1, nameLast2);
return result;
}
player_t 类型只是一个包含一堆不同成员(如 nameLast、nameFirst 等)的 Struct。我不知道我的 bsearch() 参数有什么问题!
最佳答案
您正在尝试使用 bsearch
来搜索指针数组,显然: base
参数是 player_t**
, size
参数是 sizeof(player_t*)
。 playerCompare
的实现似乎与此匹配,因为它将 p
转换为 player_t**
。
唉,您将 key 作为 player_t*
传递,而不是作为 player_t**
传递。要匹配 playerCompare
的行为,您应该传递 &playerPointer
(即 player_t**
)。
我希望在 playerCompare
调用的 bsearch
中发生访问冲突/段错误(包括从 strcmp
调用的 playerCompare
),快速检查转储或查看堆栈的调试器应该确认。
关于c - 在 C 中使用 bsearch 进行段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20599969/