c++ - 将char数组传递给exec *()系列函数后,如何释放它们的内存

标签 c++ c memory memory-leaks

我正在编写混合的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/

相关文章:

c++ - 访问作为参数传递的对象的不同成员的模板

mysql - 如何在 C 中返回 SELECT COUNT 的值

java - Eclipse 内存分析器 - 尝试获取堆转储时出错

c - 读取文件的线程安全

c# - 如何在 C# 中执行哨兵模式?

c++ - 将 [] 索引到无序映射时出现段错误

c - 头文件中的内存分配

linux - Linux中是否存在虚拟内存地址的复用?

c++ - 泛型函数的重载可以对其他重载开放吗?

c - 我应该引用哪些文件来进行 Contiki 中的模拟