内存分配和** argv参数

8

我知道我们如何使用这个参数,甚至知道如何使用它。

但有一件事情我仍然不明白。程序如何为来自输入的字符串分配内存?在程序开始时,**argv没有分配的内存,是吗?我本来期望会出现段错误,但实际上并没有发生。

有人知道这个内存分配是如何工作的吗?


1
什么什么?嗯? - thang
2
“没有分配内存”是什么意思?argv中的指针都是有效的,并且指向可以安全访问的内存。你期望哪段代码会产生segfault? - Wyzard
4
在调用main()函数之前,它由运行时库分配。 - Paul Roub
2
可能是重复的问题?? https://dev59.com/c2855IYBdhLWcg3wsWlq - Varvarigos Emmanouil
1个回答

12

C/C++运行时处理命令行参数并创建一个内存区域,用于存放这些参数。然后调用你的main()函数,并向其提供参数的数量和存储参数的区域指针。

因此,C/C++运行时拥有分配的内存区域,而由C/C++运行时来释放该区域,一旦你的main()函数返回或使用其他停止程序的C/C++函数(如exit())。

这种过程起源于在Unix下使用C,并作为提供C++委员会试图维护的向后兼容性的一部分保留了下来。

通常情况下,当程序加载时,由加载器启动的入口点不是你的main()函数,而是在C/C++运行时中定义的入口点。C/C++运行时进行各种初始化,以设置C/C++标准指定在初始化完成后调用main()函数时将存在的环境。

在此初始化过程中的一步是解析所提供的命令行参数,然后将其作为函数参数提供给main()函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接