我在Linux上工作。存储器的哪一部分是存储的命令行参数(堆栈或堆)?
我试图执行free(argv)
并且我遇到了分段错误。那是为什么?
答案 0 :(得分:13)
我尝试执行free(argv)并且我遇到了分段错误。那是为什么?
您free
/ malloc
(以及之后可能calloc
)只能realloc
。尝试free
其他东西会调用未定义的行为。 UB表现出来的一种(好的)方式是产生分段错误;一种(坏的)方式是使程序看起来像预期的那样工作。
关于它们的位置......阅读C99 Standard的第5.1.2.2.1节 - 其未指定。
argv数组指向的字符串应该 由程序修改,并在程序之间保留它们最后存储的值 启动和程序终止。
答案 1 :(得分:1)
我正在使用Linux。存储器的哪一部分是存储的命令行参数(堆栈或堆)?
这取决于实施;检查您的编译器文档。所需要的只是argc
和argv
,以及argv
数组指向的字符串,可由程序修改。
我试图执行free(argv)
并且我遇到了分段错误。那是为什么?
您没有使用argv
分配malloc
。您不需要释放命令行参数vectory。