我在 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/