【发布时间】:2015-09-10 22:13:42
【问题描述】:
我为CreateProcess函数中的参数lpCommandLine分配内存,要么使用malloc,要么在堆栈上。
我可以在调用后立即释放/释放该内存,还是必须等到进程完成?
【问题讨论】:
我为CreateProcess函数中的参数lpCommandLine分配内存,要么使用malloc,要么在堆栈上。
我可以在调用后立即释放/释放该内存,还是必须等到进程完成?
【问题讨论】:
lpCommandLine 引用的缓冲区只需在调用CreateProcess 期间有效。一旦CreateProcess 返回,它将不再引用该缓冲区。
想象一下,如果您确实必须保持该缓冲区处于活动状态。如果是这种情况,那么所有父进程都必须比它们的所有子进程寿命更长。这显然是一个荒谬的提议,我相信你会从经验中知道没有这样的要求。
这里有一个普遍的原则。总的来说,API 函数在函数返回后不会引用它们的参数。如果他们确实需要这样做,那么它将在文档中明确指出,或者从函数的意图中显而易见。作为后者的一个例子,我正在考虑将一个窗口过程传递给RegisterClass。很明显,只要存在该类的窗口,窗口过程就必须保持有效。
【讨论】: