为什么将命令行参数分配给动态分配的数组会显示错误
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()
将命令行参数复制到您分配的内存中。它保留指向已分配内存的指针(而不是覆盖它),这又允许稍后释放它。
我正在学习 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()
将命令行参数复制到您分配的内存中。它保留指向已分配内存的指针(而不是覆盖它),这又允许稍后释放它。