通过将动态数组传递到函数内来扩展它

时间:2013-12-04 20:05:17

标签: arrays function dynamic parameters expansion

我有一个初始大小的数组

int size = 5; //initial size ofwordsArray
wfpPointer wordsArray = new WordFrequencyPair[size];

其中wfpPointer是指针的typedef,指针指向WordFrequencyPair类型变量的地址。

现在当我检测到我的阵列已满时,我调用以下函数来展开它:

int expandWordsArray(WordFrequencyPair wordsArrayIn[], int currentSize){

    int newSize = currentSize * 2;
    wfpPointer newArray = new WordFrequencyPair[newSize];

    for(int i = 0; i < currentSize; i++)
        newArray[i] = wordsArrayIn[i];

    delete [] wordsArrayIn;
    wordsArrayIn = newArray;



    return newSize;



}
事实上,当我在main中编写这段代码而不调用函数时,它完全正常工作并且数组扩展了。从函数内部,我的程序崩溃了。注意:eclipse没有给我任何错误,编译程序没有问题。

Plz帮助

谢谢

1 个答案:

答案 0 :(得分:0)

您正在通过值传递数组(即指向数组第一个元素的指针)。函数删除数组(使用指针的原始值),然后在堆上构造一个新数组,并将本地指针指向它。

同时,回到调用代码(main),指针没有改变,旧数组已被删除。当你试图取消引用指针时,BOOM!

您应该通过引用传递指针:

int expandWordsArray(WordFrequencyPair *&wordsArrayIn, int currentSize)