2016-05-26 60 views
-1

我有一個結構如何使用memcpy()函數動態分配,結構

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

的'memcpy'和'memmove'參數是可疑 –

+0

'的memcpy(DEST + * size_dest,SRC的sizeof(過程));'...,爲的memmove(類似) – joop

+1

也許你不知道'src + 1'表示指向下一個'process'對象(不要增加1個字節) –

回答

1

有一些問題與您的代碼:

  • 您應該使用const在源指針,使之清楚,它是隻讀的。
  • 您不應該輸入malloc()的返回值。
  • 最好使用sizeof *dest將其「鎖定」爲實際指針,而不是重複類型名稱。
  • 尺寸和陣列指數最好表示爲size_t,而不是int。請記住在這種情況下使用%zu進行打印。
  • 請記住,可以分配結構,不需要使用memcpy作爲結構值。副本可以寫成:dest[*size_dest] = src[*size_src];,不需要函數調用。
  • 請記住,指針算術是而不是以字節爲單位完成的。
-1

dest + (sizeof(process))*(*size_dest)替換爲dest + *size_destsize_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)); 
}