我有一个结构
typedef struct process {
int pid;
int burst_t;
int io_t;
int pri;
int arrive;
int wait;
int turnaround;
int work;
int remain;
} process;
和功能
void move_process(process* dest, int *size_dest, process* src, int *size_src)
{
memcpy(dest + (sizeof(process))*(*size_dest), src, sizeof(process));
(*size_dest)++;
(*size_src)--;
printf("%d\n", sizeof(process));
memmove(src, src + sizeof(process), sizeof(process)*(*size_src));
}
ready = (process*)malloc(sizeof(process)*numberOfProcess);
remain = (process*)malloc(sizeof(process)*numberOfProcess);
move_process(ready, &s_ready, remain, &s_remain);
在函数move_process()的最后一行
我想删除进程* src中的第一个进程 但它不起作用。
我该怎么办?
答案 0 :(得分:1)
您的代码存在一些问题:
const
,以明确它是只读的。malloc()
。sizeof *dest
来锁定"它是实际指针,不重复类型名称。size_t
,而不是int
。在这种情况下,请务必使用%zu
进行打印。memcpy
。副本可以写成:dest[*size_dest] = src[*size_src];
,不需要函数调用。答案 1 :(得分:-1)
将dest + (sizeof(process))*(*size_dest)
替换为dest + *size_dest
以转发size_dest
个地点。同样适用于memmove。
这应该可以解决问题。
void move_process(process* dest, int *size_dest, process* src, int *size_src)
{
memcpy(dest + *size_dest), src, sizeof(process))
(*size_dest)++;
(*size_src)--;
printf("%d\n", sizeof(process));
memmove(src, src + 1, sizeof(process)*(*size_src));
}