gpt4 book ai didi

c - 这是在 C 中释放内存的正确方法吗?

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

我在 C 中有一个结构如下:

typedef struct ArrayStruct{
float * array;
size_t used;
size_t size;
}Array;

我初始化如下:

void initArray(Array *a, size_t initialSize) {
a->array = (float *)malloc(initialSize * sizeof(float));

if(a->array){
}
else{
printf("OUT OF MEMORY 1!!\n\r");
}

a->used = 0;
a->size = initialSize;
}

我的问题是:以下代码是否是释放结构使用的任何内存的正确方法:

void freeArray(Array *a) {
a->array = NULL;
free(a->array);
a->used = 0;
a->size = 0;
}

请帮忙。谢谢。 :)

最佳答案

不,这不是执行 free 的正确方法,因为您在实际释放之前将要释放的指针设置为 NULL 它。你应该反过来做:

free(a->array);  // Free the memory
a->array = NULL; // Clear out a dangling pointer

具有空条件分支的模式也值得怀疑。而不是做

if(a->array){
}
else{
printf("OUT OF MEMORY !!!\n\r");
}

你应该做的

if(!a->array){
printf("OUT OF MEMORY !!!\n\r");
}

当分配失败时,您还应该将 a->size 设置为零(目前,即使在分配失败时,您的代码也会遇到将 size 设置为 initialSize 的情况):

if(!a->array){
printf("OUT OF MEMORY !!!\n\r");
a->used = 0;
a->size = 0;
return;
}

关于c - 这是在 C 中释放内存的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36607751/

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