Решение: выделенная память освобождается после выхода из программы.Приходится читать + записывать с диска обратно в связанный список, а затем переписывать для обновления базы данных!Всем спасибо =)
Здравствуйте, я в основном работал над этой программой базы данных последние несколько ночей, но я просто постоянно захожу в тупик.Назначение назначено сегодня , поэтому, если бы вы могли мне помочь, это было бы очень признательно.= T
База данных реализована с помощью связанного списка и состоит из нескольких файлов: sdbm.c, sdbm.h, new.c, get.c, insert.c, put.c и remove.с.sdbm.c содержит методы для базы данных на основе интерфейса sdbm.h, а другие файлы содержат основные методы, которые используют методы из sdbm.
Первая проблема возникает с программой вставки, которая, кажется, работаетхорошо, когда я пытаюсь добавить пару ключ-значение ... то есть, пока мы не попытаемся снова вызвать программу вставки.Распределенная память, кажется, исчезла!Я исследовал, , пытаясь выяснить, почему, несмотря на то, что я неправильно написал, почему он исчезает после выхода из программы вставки. Вот некоторый код:
- Структура узла + глобальная переменная:
struct dbase_Node {
char *keyValue;
char *element;
struct dbase_Node *next;
};
typedef struct dbase_Node Node;
Node *head;
========
static bool sdbm_insert_back(Node **headRef, const char *key, const char *value)
{
Node *new = (Node *)malloc(sizeof(Node));
if (new == NULL)
return false;
else {
new->keyValue = malloc(strlen(key));
new->element = malloc(strlen(value));
strcpy(new->keyValue, key);
strcpy(new->element, value);
new->next = *headRef;
*headRef = new;
return true;
}
}
bool sdbm_sync()
{
if (!isOpen()) { return false; }
if (fopen(databaseName, "w" ) == NULL) {
error = SDBM_FOPEN_FAILED;
return false;
}
Node *current = head;
while (current != NULL) {
fprintf(database, "Key: %s\n", current->keyValue);
fprintf(database, "Value: %s\n", current->element);
current = current->next;
}
return true;
}
Я запускаю следующее:
. / New [база данных] <- работает нормально ./insert [база данных] [ключ] [значение] <- кажется, работает нормально </p>
А потом, после того, как я пытаюсь вставить больше, уже добавленные узлы исчезли ...