gpt4 book ai didi

calloc 是否可以在没有 free 的情况下安全地使用?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:39 24 4
gpt4 key购买 nike

我是一名几乎没有 C/C++ 经验的 Java 程序员,试图改编一些与 JNI 一起使用的简单 C/C++ 代码。

我读到用单个 calloc() 分配的数组(或任何其他内存块)应该始终通过单个 free() 调用释放,该调用具有与 malloc 返回的相同指针。如果它没有被释放,它会导致内存泄漏。

我正在改编的 C/C++ 代码使用 calloc(),但没有相应的 free() 调用。是否存在不应该调用 free() 或代码编写错误的情况?

最佳答案

calloc(...)malloc(...) 应该始终伴随着相应的 free() 以便应用程序/操作系统可以回收内存用于其他目的。不释放内存的应用程序将“泄漏”该内存并使其无法使用。

如果您不使用 free(),一个合理的操作系统会在应用程序关闭时使该内存再次可用,但是依赖操作系统清理任何内存泄漏的程序是很糟糕的编程并应修复。

这(如您所知)与 Java 不同,Java 有一个垃圾收集器来定期清理任何不再使用的内存。

作为一般附加说明,不需要使用相同的指针 来释放内存。例如,您可以这样做:

// Create an array of 10 integers.
int *x;
x = calloc(10, sizeof(int));

// Create another pointer 'y', which uses the same array as x.
int *y;
y = x;

// Delete the array. Both 'x' and 'y' are unusable now.
free(y);

关于calloc 是否可以在没有 free 的情况下安全地使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38941962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com