У меня есть два разных типа структуры (показано ниже).Для структуры LetterFrequencyPair у меня есть связанный список.Я пытаюсь заставить функцию пройти по этому связанному списку, чтобы найти узел с наименьшим значением частоты, создать BinaryTreeNode для этого члена и затем удалить оригинал из связанного списка.
Поэтому я создаюновый узел, «низкий», и назначить его узлу с самой низкой частотой.то есть низкий = темп;Поскольку 'low' - это отдельный узел, а не просто указывающий на temp, разве он не должен хранить значения, которые у temp есть как свои собственные, поэтому, когда 'temp1' (temp) освобождается, у него должны сохраняться те же значения?
Структуры:
struct LetterFrequencyPair
{
char character;
int frequency;
//Creating a pointer to point to the next child in the list
struct BinaryTreeNode* next;
};
struct BinaryTreeNode
{
//create a pointer to point to the LetterFrequencyPair
struct LetterFrequencyPair* letter_frequency_pair;
//create pointers to the children of the node
struct BinaryTreeNode* leftChild;
struct BinaryTreeNode* rightChild;
};
Функция:
struct BinaryTreeNode* ret_lowestF()
{
int val = 1000;
struct LetterFrequencyPair* temp;
struct LetterFrequencyPair* temp1 = NULL;
struct LetterFrequencyPair* prev = NULL;
struct LetterFrequencyPair* prev_low = NULL;
struct LetterFrequencyPair* low = malloc(sizeof(struct LetterFrequencyPair));
struct BinaryTreeNode* lowest = malloc(sizeof(struct BinaryTreeNode));
temp = root;
if (temp == NULL)
{
printf("List is empty.\n");
}
else
{
while (temp != NULL)
{
printf("%c\t%d\n", temp->character, temp->frequency);
if (val > temp->frequency)
{
low = temp;
val = temp->frequency;
lowest->letter_frequency_pair = low;
temp1 = temp;
prev_low = prev;
}
prev = temp;
temp = temp->next;
}
printf("\n\n\low f = %d\n", low->frequency);
printf("low f = %d\n\n\n", lowest->letter_frequency_pair->frequency);
prev_low->next = temp1->next;
temp1->next = NULL;
free(temp1);
printf("\n\n\low f = %d\n", low->frequency);
printf("low f = %d\n\n", lowest->letter_frequency_pair->frequency);
}
return lowest;
}
Я ожидаю, что f из 'low' будет 2. Что это до того, как temp1 будет освобожден,Однако после освобождения temp1 значение становится равным -572662307.Что я понимаю, потому что узел, которому он был назначен, больше не существует, но, поскольку 'low' выделяет память, я думал, что он будет содержать эти исходные значения там?