を返します。私がRedis SkipListをデバッグするとき、私はzslGetElementByRank(t_zset.c)を使いたいと思います。私はとRedisのメイン関数のコードに置き換え:Redis zslGetElementByRank(t_zset.c)エラーアドレス
はint main(int argc, char **argv) {
zskiplistNode *node;
zskiplist *zsl = zslCreate(); //create a skiplist
zslInsert(zsl, 65.5, sdsnew("tom")); //insert some data
zslInsert(zsl, 87.5, sdsnew("jack"));
zslInsert(zsl, 70.0, sdsnew("alice"));
zslInsert(zsl, 95.0, sdsnew("tony"));
printf("The Rank equal 4 is :");
node = zslGetElementByRank(zsl, 4); //get element by rank
printf("%s->%f\n", node->ele, node->score);
return 0;
}
$作りを
$ ./src/redis-server
[1] 29749セグメンテーションフォールトが./src/redis-server //私が手segmentfault
、私はコードをデバッグ、私はzslGetElementByRank、メインのアドレスを印刷し、アドレスは次のとおりです。
(GDB)PX x is zslGetElementByRank returnd
$ 1 =(zskiplistNode *)0x7ffff6e25000
アドレスは0xfffffffff6e25000に0x7ffff6e25000から変更された理由(GDB)のpノード
$ 2 =(zskiplistNode *)0xfffffffff6e25000
は、私は混乱しています。
それを忘れて申し訳ありませんが、私のRedisのバージョンは4.0.1
感謝です!
私はglibcのmalloc関数でコードを再コンパイル:。 $はMALLOC = libcの $作る/ SRC/Redisのサーバー ランク等しい4は次のとおりです。tony-> 95.000000 答え理由はありません。 –