gpt4 book ai didi

c - 如何将 memcpy() 函数与动态分配结构一起使用

转载 作者:行者123 更新时间:2023-11-30 19:38:50 25 4
gpt4 key购买 nike

我有一个结构

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() 的最后一行,

我想删除 process* src 中的第一个进程但它不起作用。

我该怎么办?

最佳答案

您的代码存在一些问题:

  • 您应该在源指针上使用 const 以表明它是只读的。
  • 您不应强制转换 malloc() 的返回值。
  • 最好使用 sizeof *dest 将其“锁定”到实际指针,而不是重复类型名称。
  • 大小和数组索引最好表示为 size_t,而不是 int。在这种情况下,请记住使用 %zu 进行打印。
  • 请记住,可以分配结构,无需使用 memcpy 来获取结构值。副本可以写成:dest[*size_dest] = src[*size_src];,不需要函数调用。
  • 请记住,指针算术不是以字节为单位完成的。

关于c - 如何将 memcpy() 函数与动态分配结构一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456612/

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