覆盖C中的结构数组

时间:2011-01-06 03:00:45

标签: c memory struct

我正在尝试将指向结构数组的指针传递给函数。然后让函数创建自己的结构数组,用数据填充它,然后用新数组覆盖旧数组。

我很确定当我尝试覆盖内存时问题就出现了。我认为我可能要么使用错误的方法来覆盖内存(我应该使用内存函数吗?)或者我可能试图覆盖错误的东西。我不太确定我做错了什么。如果有人能指出我正确的方向,我会非常感激;我已经把头发从头上拉了三个小时了。

STRUCT:

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;
}

2 个答案:

答案 0 :(得分:3)

你没有覆盖内存 - 语句cmdv = cmds只是复制指针(使cmdv指向cmds。)如果你想真正复制内存,你需要memcpy(cmdv, cmds, count * sizeof(cmd));

答案 1 :(得分:-1)

我不确定这一点,但尝试声明

  

void dissectCmd(char * str,cmd * cmdv)

as

  

void dissectCmd(char * str,cmd ** cmdv)

改变

  

cmdv = cmds;

  

(* cmdv)=&amp; cmds;

并更改来自main的当前呼叫,现在是

  

dissectCmd(cmdstr,cmdv_ptr);

  

dissectCmd(cmdstr,&amp; cmdv_ptr);

另外,当你这样做时,你将地址完全丢失到旧数组,造成内存泄漏。除非你已经在你的第二个 [...无关代码] 段落中释放了那段记忆:)