OS在哪里存储命令行参数?

时间:2011-10-11 15:05:14

标签: c

我在Linux上工作。存储器的哪一部分是存储的命令行参数(堆栈或堆)?

我试图执行free(argv)并且我遇到了分段错误。那是为什么?

2 个答案:

答案 0 :(得分:13)

  

我尝试执行free(argv)并且我遇到了分段错误。那是为什么?

free / malloc(以及之后可能calloc)只能realloc。尝试free其他东西会调用未定义的行为。 UB表现出来的一种(好的)方式是产生分段错误;一种(坏的)方式是使程序看起来像预期的那样工作。

关于它们的位置......阅读C99 Standard的第5.1.2.2.1节 - 其未指定

  

argv数组指向的字符串应该   由程序修改,并在程序之间保留它们最后存储的值   启动和程序终止。

答案 1 :(得分:1)

我正在使用Linux。存储器的哪一部分是存储的命令行参数(堆栈或堆)?

这取决于实施;检查您的编译器文档。所需要的只是argcargv,以及argv数组指向的字符串,可由程序修改。

我试图执行free(argv)并且我遇到了分段错误。那是为什么?

您没有使用argv分配malloc。您不需要释放命令行参数vectory。