В части из проекта, над которой я работаю, я реализую дерево AVL. Одна из функций, которую мне нужно реализовать, принимает и массив ключа (класс шаблона для ключей дерева) и указатель int (которому мне нужно вставить размер дерева AVL). В этом func мне нужно вставить элементы дерева в массив в определенном порядке (теперь это не имеет значения). Это подпись функции, и она ДОЛЖНА быть такой: GetAllAppsByDownloads(Key **apps, int *numOfApps)
Динамическое распределение массива в функции в C++
Но по какой-то причине я не могу ее реализовать. Я столкнулся с небольшими проблемами, и главное, что я неправильно распределяю память (я хочу, чтобы массив был инициализирован значением по умолчанию для Key), а затем, когда я вставляю ключи, они не вставлены правильно.
Это, как я вызвать функцию из тестов, которые я построил (возможно, я это делаю неправильно?):
int* keyArr;
int numApps;
tree.GetAllAppsByData(&keyArr,&numApps);
for(int i=0; i<numApps; i++){
cout<<keyArr[i]<<endl;
}
И это мои функции:
void GetAllAppsByData(Key** apps, int*numOfApps){
AVL_node<Dat,Key,OS>* temp=(getRoot());
*numOfApps=size;
*apps=(new Key[size]()); /*size represents the amount of elements.
its a variable in the private section of the class*/
KeyIntoArrByData(temp, apps, 0);
};
void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int i){
if(root==NULL) return;
KeyIntoArrByData(root->right, array, i);
array[i]=&(root->key);
i++;
KeyIntoArrByData(root->left, array, i);
}
/* P.S Dat and OS are other template variables I receive from the user, they
don't matter here*/
Я думаю, причина, по которой ключ вставлен неправильно, потому что i
меняется, когда я возвращаюсь обратно из рекурсии, но мне не удалось найти решение для него (я попробовал добавить еще один int в класс, который я буду использовать только в этой функции, чтобы он остался как новое значение при возврате рекурсии), wou Не обращай внимания на хаха.
Но это не большая проблема, элементы, которые он вставляет в массив, вставлены неправильно (помещается в мусор, а не в ключи), обратите внимание: только array[0]
вставлен правильно.
Пожалуйста, помогите мне понять, что я делаю неправильно :(
Что об использовании отладчика пошагово, чтобы получить власть, что на самом деле происходит на –
'* numOfApps = размер;.?' Где 'size' фактически приходит от –
не спекулировать, использовать? отладчик, чтобы пройти через код и узнать, что именно происходит. –