2017-11-12 1 views
0

を返します。私が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

感謝です!

+0

私はglibcのmalloc関数でコードを再コンパイル:。 $はMALLOC = libcの $作る/ SRC/Redisのサーバー ランク等しい4は次のとおりです。tony-> 95.000000 答え理由はありません。 –

答えて

0

私はserver.cにzslGetElementByRankを宣言していないからです。
警告がある:
assignment makes pointer from integer without a cast [enabled by default]