我正在做一个红黑树实现,目前正在测试“转储”功能。
该函数是对树的有序遍历,它将树中的每个元素保存到一个动态数组中,并返回指向该数组的指针。
经过调试,我发现该功能正常工作,并且数组包含它应该包含的元素。但是当测试函数试图“计算”数组的第一个元素时,我得到
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 的每个元素在执行该行之前确实存在于数组中。
谢谢大家的帮助!