簡體   English   中英

覆蓋C中的結構數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM