假设阵列总是连续的, 我想知道现在我在做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正在寻找一个可能会破坏的案例。
答案 0 :(得分:3)
根据memcpy()
的手册,内存区域不得重叠。但是,你的内存区域会。您应该使用memmove()
来重叠区域。