【问题标题】:CreateProcess and lpCommandLine lifetimeCreateProcess 和 lpCommandLine 生命周期
【发布时间】:2015-09-10 22:13:42
【问题描述】:

我为CreateProcess函数中的参数lpCommandLine分配内存,要么使用malloc,要么在堆栈上。

我可以在调用后立即释放/释放该内存,还是必须等到进程完成?

【问题讨论】:

    标签: c windows winapi process


    【解决方案1】:

    lpCommandLine 引用的缓冲区只需在调用CreateProcess 期间有效。一旦CreateProcess 返回,它将不再引用该缓冲区。

    想象一下,如果您确实必须保持该缓冲区处于活动状态。如果是这种情况,那么所有父进程都必须比它们的所有子进程寿命更长。这显然是一个荒谬的提议,我相信你会从经验中知道没有这样的要求。

    这里有一个普遍的原则。总的来说,API 函数在函数返回后不会引用它们的参数。如果他们确实需要这样做,那么它将在文档中明确指出,或者从函数的意图中显而易见。作为后者的一个例子,我正在考虑将一个窗口过程传递给RegisterClass。很明显,只要存在该类的窗口,窗口过程就必须保持有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 2021-01-03
      • 2018-07-18
      • 2012-09-21
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多