【问题标题】:Memory allocation and **argv argument [closed]内存分配和 **argv 参数
【发布时间】:2014-11-09 02:41:01
【问题描述】:

我知道我们使用这个参数的目的,我什至知道如何使用这个参数。

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

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

【问题讨论】:

  • 什么什么?嗯?
  • “没有分配的内存”是什么意思? argv 中的指针都是有效的,并且指向可以安全访问的内存。您预计什么代码会产生段错误?
  • 在调用main()之前由运行时库分配。

标签: c++ c main argv


【解决方案1】:

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

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

此过程起源于 Unix 下使用 C 语言,并为 C++ 保留,作为提供 C++ 委员会试图保持的向后兼容性程度的一部分。

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

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

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 2011-11-13
    • 2013-05-28
    相关资源
    最近更新 更多