这个简单的Queue实现有什么问题吗?

时间:2013-03-18 21:18:56

标签: c queue

假设阵列总是连续的, 我想知道现在我在做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));
    }

THX。 -Nathan 它在我的所有条件[平台最新的Linux gcc]上测试得很好,所以Iam正在寻找一个可能会破坏的案例。

1 个答案:

答案 0 :(得分:3)

根据memcpy()的手册,内存区域不得重叠。但是,你的内存区域会。您应该使用memmove()来重叠区域。