У меня есть класс Node, и когда я создал массив указателей Node (Node *) и передал его через метод, у меня была другая длина массива в качестве параметра.
Node* hands[4];
Deal(deck,hands,4,"one-at-a-time",13);
void Deal(Node* &deck, Node* hands[], int people, std::string type, int count){
Node*& temp = deck;
for (int i = 0; i < count; ++i) {
for (int j = 0; j < people; ++j) {
append(hands[j], CopyDeck(temp));
temp = temp->after;
}
}
}
Когда я использую отладчик Clion, чтобы увидеть значение переменных, я обнаружил, что создаваемые руки имеют значения
hands[0] = 0x746365667265700e
hands[1] = NULL
hands[2] = NULL
hands[3] = 0x00007fc44b402430
И когда он передается через метод, в методе руки получают
*hands=0x746365667265700e
hands[1]=NULL
hands[2]=NULL
hands[3]=0x00007fc44b402430
hands[4]=0x00007fc44b402570
Что означает "* руки"? И почему начальное значение в руках не NULL? На самом деле минимальный пример, который я могу иметь, выглядит примерно так:
class Node{};
void test(Node* list[]){}
int main(int argc, char* argv[]){
Node * temp[4];
test(temp);
}
Но это работает. И я уже написал тот же код в других файлах и работает так, как я думал.
Колода - просто двусвязный список Node. Узел имеет атрибут «после», указывающий на следующий узел. Мой отладчик сказал мне до того, как
Node* &temp = deck;
параметр "руки" уже становится массивом из 5 элементов. Я думаю, что нашел возможную причину, но я не могу понять отношения между ними. В моей основной функции есть два метода тестирования. Первый называется «SortingTest», а второй - «DealingTest». Когда я комментирую первый тестовый метод, мой DealingTest работает правильно, но после того, как я раскомментирую его, DealingTest не работает. После завершения SortingTest в основном методе не остается атрибута или чего-либо еще. Кто-нибудь может мне это объяснить? Спасибо вам всем. Или, может быть, мой метод очистки неверен, поэтому он не освобождает память правильно?
void DeleteAllCards(Node* root){
Node *current, *next;
current = root;
while (current != nullptr){
next = current->after;
delete current;
current = next;
}
}