如何在将 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。
我正在编写混合 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。