Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c++;_C++_Arrays_Argument Passing_Dynamic Allocation - Fatal编程技术网

C++ 在c++;

C++ 在c++;,c++,arrays,argument-passing,dynamic-allocation,C++,Arrays,Argument Passing,Dynamic Allocation,在我正在进行的一个项目的一部分中,我正在实现一个AVL树。我需要实现的函数之一是接收和数组Key(树的Key的模板类)和int指针(我需要插入AVL树的大小)。在这个函数中,我需要将树的元素按一定顺序插入数组(现在不重要)。 这是函数的签名,必须是这样的:GetAllAppsByDownloads(Key**apps,int*numOfApps) 但由于某种原因,我没能实现它。我遇到了一些问题,主要的问题是显然我分配内存不正确(我希望数组初始化为Key的默认值),然后当我插入Key时,它们没有被

在我正在进行的一个项目的一部分中,我正在实现一个AVL树。我需要实现的函数之一是接收和数组Key(树的Key的模板类)和int指针(我需要插入AVL树的大小)。在这个函数中,我需要将树的元素按一定顺序插入数组(现在不重要)。 这是函数的签名,必须是这样的:
GetAllAppsByDownloads(Key**apps,int*numOfApps)

但由于某种原因,我没能实现它。我遇到了一些问题,主要的问题是显然我分配内存不正确(我希望数组初始化为Key的默认值),然后当我插入Key时,它们没有被正确插入

这就是我在构建的测试中调用函数的方式(可能我做得不正确?)

int*keyArr;
int numApps;
GetAllAppsByData(&keyArr和&numApps);

对于(inti=0;i我不确定这是否是您所有的问题,但您正在通过值传递i,并且需要通过引用来传递您如何使用它

void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int &i)
void KeyIntoArrByData(AVL_节点*根,键**数组,int&i)

使用调试器一步一步地执行,以掌握实际发生的情况如何?
*numOfApps=size;
size的实际来源是什么?不要猜测,使用调试器一步一步地执行代码,并准确地找出到底发生了什么。@πάνταῥεῖ ῥεῖ: 每次插入元素时,我都会增加大小(
size++;
),删除元素时,我会减小大小(
size--;
)。它在构造函数中被初始化为
0
。(@Captain Obvlious)我确实使用了调试器,但我无法理解到底出了什么问题。调试器可以正确地执行所有操作,但会突然崩溃或将垃圾放入数组,而不是本应插入的内容。此外,它似乎没有使用
*apps=new Key[size]()中的默认构造函数初始化数组
,为什么会这样?哦,天哪,我真不敢相信我忘记了引用,我现在觉得自己太蠢了,谢谢,它修复了那个。这是我的新代码:。我可以看到(从打印中)它插入了它应该插入的值,但当我上次应该从函数返回时(插入完毕,返回递归并假设返回到
GetAllAppsByData
)它崩溃了(消息)。完全不知道为什么。如果我跨过
树。GetAllAppsByData(&keyArr,&numApps);
在调试器中它不会崩溃,而是插入垃圾。
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*/
void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int &i)