为什么将命令行参数分配给动态分配的数组会显示错误

why assigning a command line argument to a dynamically allocated array shows error

我正在学习 C 并且在特定代码中,我已将命令行参数分配给一个字符数组,该字符数组的内存 动态分配

       char *ptr;
       ptr=(char *)malloc(500*sizeof(char));
       ptr=argv[argc-2];

完成代码并释放内存后

free(ptr);

我收到一个错误

*** Error in `./a': free(): invalid pointer: 0x00007fff00c0c604 ***

谁能帮我看看我错在哪里

有一些误解。

“我已将命令行参数分配给字符数组”。
ptr=argv[argc-2];
不,你没有。您将指针的值(来自命令行参数的字符序列)分配给指针变量(丢失指向先前存储在那里的分配内存的指针)。

“完成代码后[...]释放内存”

free(ptr);

不是真的,你正在做的是在一个之前没有分配的指针上调用 free()(因为之前的错误丢失了它)。

这就是对发生的事情的解释。
Retired Ninja 的评论暗示了一个解决方案,但我建议改用 strncpy() 将命令行参数复制到您分配的内存中。它保留指向已分配内存的指针(而不是覆盖它),这又允许稍后释放它。