Я делаю реализацию Red Black Tree и в настоящее время тестирую функцию 'dump'.Кодовый разрыв при попытке доступа к динамическому массиву. Opens malloc.c
Эта функция представляет собой обход дерева в порядке, который сохраняет каждый элемент в дереве в динамический массив и возвращает указатель на этот массив.
После отладки я нашел, что функция работает правильно, и массив содержит элементы, которые он должен. Но когда тестовая функция пытается «COUT» первый элемент массива, я получаю
Assignment4.exe has triggered a breakpoint.
с последующим malloc.c
открытия к этому:
__forceinline void * __cdecl _heap_alloc (size_t size)
{
if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}
→ return HeapAlloc(_crtheap, 0, size ? size : 1);
}
Так вот код, который может быть виновником :
Функции:
int* /*T*/ RedBlackTree::dump(int& number)
{
int* /*T*/ arr = new int(n);
number = 0;
inOrder(root, arr, number);
return arr; //returns pointer to entire tree in ascending order
}
void RedBlackTree::inOrder(Node* nd, int* /*T*/ arr, int& num)
{
if(nd != NULL)
{
inOrder(nd->left, arr, num);
arr[num] = nd->data;
num++;
inOrder(nd->right, arr, num);
}
}
И тест функции:
int main()
{
RedBlackTree tree;
//insert test
tree.insert(15);
tree.insert(20);
tree.insert(20);
tree.insert(21);
tree.insert(48);
tree.insert(18);
tree.insert(1);
tree.insert(7);
tree.insert(25);
//dump test
int* arr = new int(tree.size());
int n = 0;
arr = tree.dump(n);
for(int i = 0; i < n; i++)
{
→ cout << arr[i] << " ";
}
return 0;
}
Я положил стрелу на строку, которая вызвала ошибку.
Я проверил с отладчиком и быстро посмотрел, что каждый элемент от i = 0 до i = 8 существует в массиве непосредственно перед тем, как эта строка будет выполнена.
Спасибо вам за помощь!
Пожалуйста, используйте тег [red-black-tree]. [red] - это язык программирования – kealist