如何在将 char 数组传递给 exec*() 函数族后释放它们的内存

how to free memory of char arrays after passing them to exec*() family of functions

我正在编写混合 C++/C 代码并使用 exec* 系列 C 函数。考虑以下代码:

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 成功那么它不会 return,所以这意味着 我没有办法释放分配给 argv 的内存? 我应该担心任何类型的内存泄漏吗?

如果execvp完成后为我释放了内存,那么在失败的情况下(即return),我还需要释放吗? argv 我自己的记忆,即在 exit(EXIT_FAILURE) 行之前?

我似乎无法在其手册页或其他任何地方找到关于此的任何参考资料。

execvp 用新进程替换当前进程内存。因此,当前进程中的所有内容(包括其内存分配)都将被丢弃,所有内容都将替换为您正在执行的内容。

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 失败,那么您可能需要释放它以避免内存泄漏。特别是,如果该进程要在退出前做其他事情。但是在 退出之前释放 通常是不必要的,在某些情况下甚至 counter-productive。