内存分配和**argv参数

8 c c++ program-entry-point argv

我知道我们使用这个论点,我甚至知道如何处理这个论点.

只有一件事我还是不明白.程序如何为来自输入的字符串分配内存.**argv在程序开始时没有分配内存,不是吗?我期待段错误,但它没有发生.

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

Ric*_*ers 12

C/C++运行时处理命令行参数并创建放置参数的内存区域.然后它会调用您main()提供的参数数量以及指向存储参数的区域的指针.

因此,C/C++运行时拥有分配的内存区域,一旦main()返回或者如果使用某些其他C/C++函数来停止程序,则由C/C++运行时解除分配区域exit().

这个过程源于在Unix下使用C并且为C++保留,作为提供C++委员会试图维持的向后兼容程度的一部分.

通常,当程序加载时,加载程序启动的入口点不是您的main()函数,而是C/C++运行时中定义的入口点.C/C++运行时执行各种初始化以设置C/C++标准所说的环境,当main()初始化完成后,C/C++运行时调用该函数时将存在该环境.

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