在C语言中,是否需要释放(或删除)传递给main函数的参数?

7

如果我有如下的主函数:

int main(int argc, char* argv[])
{
    return 0;
}

需要释放argv吗?我们可以释放argv吗?是否应该释放argv?


1
你曾经见过这样的操作吗? - juanchopanza
1
不要随意使用free()函数,只有那些被malloc()或calloc()函数分配的内存才需要使用free()函数释放。 - Arlie Stephens
3个回答

13

需要释放 argv 嘛?

不需要。

我们可以释放 argv 吗?

不行。虽然语法上被接受,但这将导致未定义的行为(可能会出现运行时错误)。argv 指针数组的内存管理遵循由操作系统(ABI 绑定)管理进程入口点 (main()) 而非 main() 客户端定义的原则。

我们应该释放 argv 吗?

不用,因为你没有分配它,所以不需要释放。


1
你至少得回答一次“是”的!我会说,第二个问题的答案是“是”。我可以释放argv,只需要输入10个字符即可。 - SergeyA
@SergeyA,你没有收到任何错误是偶然的。调用delete argv;是未定义行为。 - πάντα ῥεῖ
我从未声称过其他。然而,当以对比的方式提问(我可以/我应该吗),我认为第一个问题是关于物理可能性,而不是实践的正确性。 - SergeyA
你看,关于足球比赛的“我能抢到球并跑”这个问题可以有肯定和否定的答案。在这里也是一样的。 - SergeyA
@SergeyA:“我有什么资格评判呢?”和社区中的任何其他人一样。努力提供更好的答案并坚持使用更好的措辞是一种良好的行为,也受到了很高的赞赏。 - πάντα ῥεῖ
显示剩余2条评论

8
简单概念:如果您没有分配,也就不需要释放。:))

4
除非类似于 strdup 分配了内存,否则不要释放内存。 - Weather Vane
2
@WeatherVane 我认为 strdupmalloc 一样是显式的分配。 - Some programmer dude
@JoachimPileborg 是的,但对于初学者来说,这个答案有点教条主义;阅读手册是值得的。 - Weather Vane
3
有些过于简化了。 - Martin York

3
不需要。你可以这样做,但这就像“我能直接从特朗普大厦跳下来吗?”的意思一样。不应该这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接