我有一个初始大小的数组
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帮助
谢谢
答案 0 :(得分:0)
您正在通过值传递数组(即指向数组第一个元素的指针)。函数删除数组(使用指针的原始值),然后在堆上构造一个新数组,并将本地指针指向它。
同时,回到调用代码(main
),指针没有改变,旧数组已被删除。当你试图取消引用指针时,BOOM!
您应该通过引用传递指针:
int expandWordsArray(WordFrequencyPair *&wordsArrayIn, int currentSize)