gpt4 book ai didi

c - 在 C 中使用 bsearch 的段错误

转载 作者:行者123 更新时间:2023-12-04 09:39:50 24 4
gpt4 key购买 nike

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**)。

我希望访问冲突/段错误发生在 bsearch 调用的 playerCompare 中(包括从 playerCompare strcmp),快速检查转储或在调试器中查看堆栈提升应该确认。

关于c - 在 C 中使用 bsearch 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20599969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com