Ubuntu 10.10 gcc 4.4.4
Я просто экспериментирую с выделением и освобождением.
Однако я пытаюсь избежать проблемы, когда объект освобождается более одного раза.
Однако, когда я тестирую, я замечаю, что объект, который создан и освобожден, не возвращается в нулевое состояние.Так есть ли какие-либо условия, которые я могу установить, чтобы избежать, если это произойдет?
Я также попытался установить объект в NULL после освобождения.Тем не менее, он все еще пытался освободить объект.
Это ссылка на этот вопрос, просто вы знаете, не является дубликатом: освобождение выделенной памяти
Мой кодниже:
#include <stdio.h>
#include "objects.h"
int main(void)
{
obj_t *obj = NULL;
obj = create_object();
destroy_object(obj);
destroy_object(obj);
return 0;
}
==
#ifndef OBJECTS_H_INCLUDED
#define OBJECTS_H_INCLUDED
typedef struct Obj_t obj_t;
obj_t* create_object();
void destroy_object(obj_t *obj);
#endif /* OBJECTS_H_INCLUDED */
==
#include <stdio.h>
#include <stdlib.h>
#include "objects.h"
struct Obj_t {
int obj_id;
};
obj_t* create_object()
{
obj_t *obj = malloc(sizeof obj);
return obj;
}
void destroy_object(obj_t *obj)
{
if(obj != NULL) {
printf("Object [ %d ] will be deleted\n", obj->obj_id);
free(obj);
}
}
==
OBJECT_FILES = objects.o main.o
CFLAGS = -Wall -Wextra -Wunreachable-code -ggdb -O0
CC = gcc
TARGET = obj
$(TARGET): $(OBJECT_FILES)
$(CC) $(CFLAGS) $(OBJECT_FILES) -o $(TARGET)
main.o: main.c objects.c
$(CC) $(CFLAGS) -c main.c
objects.o: objects.c
$(CC) $(CFLAGS) -c objects.c
clean:
rm -f $(OBJECT_FILES) $(TARGET) *~