gpt4 book ai didi

c - 这个简单的队列实现有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 18:42:40 25 4
gpt4 key购买 nike

假设数组始终是连续的,我想知道现在我正在执行 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));
}

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

最佳答案

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

关于c - 这个简单的队列实现有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com