c - 当 malloc 变量也被分配给另一个变量时,我应该如何释放它?(C 语言)
问题描述
对不起,如果这已经被问过了。
我有这个程序:
int main()
{
int *X = (int *) malloc(sizeof(int));
*X = 10;
int *Y = X;
free(Y);
return 0;
}
我不知道代码是否正确。我还需要free(X)
按我的要求打电话malloc()
吗X
?我是否也需要打电话malloc()
,Y
还是Y
可以?
解决方案
此代码不正确,因为stdlib.h
未包含必需的标头并且malloc()
未检查结果。也不鼓励malloc()
在 C 中转换结果。
正确的代码是:
#include <stdlib.h>
int main(void)
{
int *X = malloc(sizeof(int));
if (X == NULL) return 1;
*X = 10;
int *Y = X;
free(Y);
return 0;
}
您不需要也不能调用free(X);
,因为X
它指向同一点,Y
并且内存已经被free(Y);
.
如果您想指向不同的(新)事物malloc()
,则需要调用。在这种情况下,建议释放和所指向的内容。(释放将满足 Valgrind 之类的检查器,但在现代操作系统中,您不必在程序执行结束时释放东西,因为操作系统会释放您进程中使用的所有内存。有关更多信息,请参阅c - 当您malloc 后不释放? - 堆栈内存溢出Y
Y
X
X
Y
推荐阅读
- r - 根据 sf 多边形的属性编辑栅格
- reporting-services - 在 SSRS 报告中使用 count(*) 查询
- sql - 优化查询
- mingw-w64 - 使用 MinGW-w64 编译 32 位架构
- bootstrap-4 - ModuleNotFoundError:没有名为“crispy”的模块
- javascript - 如何计算一个输入与javascript中其他输入的实时总和?
- java - 已更改为 1.6
- ios - 过渡快速动画下的黑屏
- javascript - Canvas.toBlob() 在使用cropperjs库上传第二张图片时显示null by fengyuanchen
- java - 依赖 jar 时未导入 Java-Library 依赖项