-1

配列が常に隣接していると仮定すると、iamがmemcpyを実行しているので、QPop関数に何か問題があるのではないかと思います。

-- C snip ---------
    int Q[5];
    int QPush();
    static int pushIdx;
    int QPush (int *q, int val)
    {
        int ret=0;

        if ( isQFull(q) )
            return -1;

        q[pushIdx++] = val;
        return ret;
    }

    int QPop ( int *q)
    {
        int i, ret=0;
        unsigned long size = pushIdx -1 ;

        if ( isQEmpty(q) )
            return -1;

        ret = q[0];

        if ( size > 0 )
            memcpy ( q, q+1, (size*sizeof(int)) );

        q[pushIdx-1] = 0;
        pushIdx--;
        return ret;
    }

    int main()
    {
    QPush(&Q , 11);
    QPush(&Q , 12);
    QPush(&Q , 13);

    printf ( "pop = %d ", QPop(&Q));
    printf ( "pop = %d ", QPop(&Q));
    }

どうも。-Nathanすべての条件[プラットフォーム最新のLinuxgcc]で正常にテストされたため、Iamは破損する可能性のあるケースを探しています。

4

1 に答える 1

3

のマニュアルによるとmemcpy()、メモリ領域はオーバーラップしてはなりません。しかし、あなたの記憶領域はそうなるでしょう。memmove()重なり合う領域に使用する必要があります。

于 2013-03-18T21:27:44.293 に答える