Проблема заключается в том, что когда я вызываю функцию initDeque
для создания функции deque, функция должна проверить, была ли инициализирована deque. Моя мысль имела переменную bool isInit
в структуре deque и проверяла, действительно ли isInit
истинно (инициировано)/false (не инициировано). Но проблема в том, что если я звоню initDeque
более одного раза, он снова инициирует deque. Вот код:Проверьте, был ли связанный список инициализирован
int initDeque(deque *d){ //Create new deque
d = (deque*)malloc(sizeof(deque));
if ((d->isInit)==false){
if (!d) {
perror("malloc");
exit(EXIT_FAILURE);
}
d->isInit=true;
d->front=NULL;
d->rear=NULL;
return d;
} else {
printf("Deque is already initialized!");
}
}
и структура:
typedef struct{
link front;
link rear;
bool isInit;
}deque;
Моя мысль в том, что, когда я выделить память в первую очередь, он удаляет все данные, хранящиеся в front; rear; isInit;
. Что мне делать?
Просто потому, что вы выделить пространство для структуры, не означает, что она установлена. Вы должны сначала установить значения в своей структуре «d». Кроме того, что-то кажется подозрительным в вызове! Вы исходите из фона PHP? Edit * О, я вижу, да, когда вы снова вызываете malloc, вы создаете новый указатель, поэтому ссылки на старый d теряются в рамках этой функции. – EyeOfTheHawks
Инструкция 'd = (deque *) malloc (sizeof (deque));' перезаписывает предыдущий контент d указателем на неинициализированный буфер. Затем вы проверяете 'd-> isInit'! Как это может работать? Возвращение также является фиктивным. – chmike
Я имею в виду, когда я снова вызываю функцию, и она выделяет память для 'd', не уничтожает ли она все данные и не устанавливает их в' NULL' и 'false'? И нет, C - мой первый язык. –