[英]Overwriting array of structs in C
我正在嘗試將指向結構數組的指針傳遞給函數。 然后讓該函數創建自己的結構數組,用數據填充它,然后用新數組覆蓋舊數組。
我很確定當我嘗試覆蓋內存時問題就出現了。 我認為我可能要么使用錯誤的方法來覆蓋內存(我應該使用內存函數嗎?)或者我可能試圖覆蓋錯誤的東西。 我不太確定我做錯了什么。 如果有人能指出我正確的方向,我會非常感激; 我已經把頭發從頭上拉了三個小時了。
結構:
typedef struct
{
char command;
int argc;
char* argv[];
}cmd;
碼:
int main(int argc, char *argv[])
{
[... irrelevant code]
cmd cmdv[count];
cmd* cmdv_ptr = &cmdv[0];
dissectCmd(cmdstr, cmdv_ptr);
printf("%i", cmdv[0].argc);
return 0;
}
void dissectCmd(char* str, cmd* cmdv)
{
[... irrelevant code]
cmd cmds[count];
int i = 0;
for(i = 0; i < count; i++)
{
cmd next;
next.command = 'u';
next.argc = 100;
cmds[i] = next;
}
cmdv = cmds;
}
您不會覆蓋內存-語句cmdv = cmds
僅復制指針(使cmdv指向cmds。)如果要實際復制內存,則需要memcpy(cmdv, cmds, count * sizeof(cmd));
我對此不確定,但是請嘗試聲明
void dissectCmd(char * str,cmd * cmdv)
如
void dissectCmd(char * str,cmd ** cmdv)
改變
cmdv = cmds;
至
(* cmdv)=&cmds;
並改變現在的主要電話
dissectCmd(cmdstr,cmdv_ptr);
至
dissectCmd(cmdstr,&cmdv_ptr);
另外,執行此操作時,會將地址完全釋放到舊陣列,從而導致內存泄漏。 除非你已經在第二個[......無關代碼]段落中釋放了那段記憶:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.