для задания Я должен написать круговую очередь (которую, как мне кажется, большинство из вас знакомо). Я создал структуру и функцию, которая инициализирует структуру очереди с использованием динамической памяти. Обратите внимание, что у меня также есть массив arr внутри структуры, которой я назначаю память.Освобождение массива внутри структуры
По какой-то причине я не могу освободить свой массив из памяти.
struct queue {
element_t *arr; // dynamic array containing data elements
int current_size; // Counts number of elements in the queue
int front, rear; // Remark for later: extra fields need to be added here to make it a thread-safe queue as needed for the assigment
};
queue_t* queue_create(){
struct queue *queue = malloc(sizeof(struct queue));
if(queue == 0){ //check if memory available
printf("Out of memory\n");
return NULL;
}
queue -> current_size = 0;
queue -> front = -1;
queue -> rear = -1;
queue -> arr = malloc(QUEUE_SIZE*sizeof(element_t));
return queue;
}
Я пытаюсь освободить память, когда я закончил с ней, используя функцию queue_free. Функция принимает двойной указатель на очередь (часть задания).
void queue_free(queue_t** queue){
free(**queue -> arr);
free(*queue);
}
Когда я звоню последняя функция я получил сообщение об ошибке, говорящее:
queue.c: In function ‘queue_free’:
queue.c:39:16: error: request for member ‘arr’ in something not a structure or union
free(**queue -> arr);
^
Я уже проверил с Valgrind на наличие утечек. Очередь освобождается правильно, но по какой-то причине я не могу получить адрес своего массива.
Заранее благодарен
P.S. free (queue -> arr); free (* queue -> arr); и free (** queue -> arr); все сбой и генерируют одно и то же сообщение об ошибке.
Вы пробовали 'free ((* queue) -> arr)'? –
Что ты имеешь в виду? вы публикуете ошибку компилятора, а затем говорите о valgrind? Как, если у вас нет исполняемого файла? Btw. if должен быть 'free ((* queue) -> arr);' –
Фактически, я думал, что вы были разыменованы короткими: free (* (** queue) -> arr); –