我正在编写混合的C++ / C代码并利用C函数的exec*
系列。考虑以下代码:
char **argv = new char* [3];
argv[0] = "ls";
argv[1] = "-la";
argv[2] = NULL;
execvp(argv[0], argv);
perror("Failed to execute");
exit(EXIT_FAILURE);
我知道,如果execvp
成功,那么它将不会返回,这意味着我没有办法释放分配给argv
的内存吗? 我应该担心任何形式的内存泄漏吗?如果
execvp
完成后为我释放了内存,那么在失败的情况下(即返回时)为,我是否仍需要自己为argv
释放内存,即在exit(EXIT_FAILURE)
行之前? 在其手册页或其他任何地方,我似乎都找不到任何引用。
最佳答案
Should I be concerned about any sort of memory leak?
当
execvp
成功执行时,它将用ls
进程(复制所有参数)替换了整个图像,并且您分配的内存将自动回收-图像将被拆除。这不是内存泄漏,在这种情况下您无能为力。I still need to free the memory for argv myself, i.e. before the exit(EXIT_FAILURE) line?
如果
execvp
失败,那么您可能希望释放它以避免内存泄漏。特别是,如果该过程在退出之前要执行其他操作。但是在导出之前释放自由通常是不必要的,甚至在某些情况下适得其反。
关于c++ - 将char数组传递给exec *()系列函数后,如何释放它们的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63474134/