在c ++中用函数动态分配数组

时间:2014-12-01 00:17:33

标签: c++ arrays argument-passing dynamic-allocation

在我正在研究的项目的一部分中,我正在实现一个AVL树。我需要实现的函数之一是接收和Key的数组(树的键的模板类)和一个int指针(我需要插入AVL树的大小)。在这个函数中,我需要以特定顺序将树的元素插入到数组中(现在无关紧要)。 这是函数的签名,它必须是这样的:GetAllAppsByDownloads(Key **apps, int *numOfApps)

但是由于某些原因我没能实现它。我遇到了一些问题,主要的是显然我错误地分配了内存(我希望数组初始化为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,我会只在这个函数中使用,所以当递归返回时它将保持为新值),不介意一些帮助哈哈。

但这不是大问题,它插入数组的元素插入不正确(放入垃圾而不是键),注意:只正确插入array[0]

请帮我看看我做错了什么:(

1 个答案:

答案 0 :(得分:0)

我不确定你的所有问题是否存在,但是你是按价值传递我的,并且需要通过参考来传递你的使用方式。

void KeyIntoArrByData(AVL_node<Dat,Key,OS>* root, Key** array, int &i)