动态数组传递给函数

时间:2012-02-06 21:29:39

标签: c++ arrays function pointers dynamic

我在main函数中创建了2个动态数组。我通过引用将它们都传递给了函数。然后我将数据从较小的动态数组复制到较大的动态数组。我删除了较小的动态数组。将较大动态数组的地址分配给较小的动态数组。理想情况下,arr数组的大小应为10.但是,当我尝试在main中打印数组的第6个元素时,它会崩溃。请看下面的代码:

#include <iostream>
#include <string> 

using namespace std; 

void func(string * arr, string * brr); 

int main()             
{ 
    string* arr = new string[5]; 
    arr[0] = "hello0"; 
    arr[1] = "hello1"; 
    arr[2] = "hello2"; 
    arr[3] = "hello3"; 
    arr[4] = "hello4"; 

    string* brr = new string[10]; 


    func(arr, brr); 

    for(int i = 0; i < 6; i++) 
        cout << arr[i] << endl; 

    return 0; 
} 

void func(string * arr, string * brr) 
{ 
    for(int i = 0; i < 5; i++) 
        brr[i] = arr[i]; 

    for(i = 0; i < 5; i++) 
        cout << brr[i] << endl; 

    delete []arr; 

    arr = brr; 

    arr[5] = "hello5";
} 

3 个答案:

答案 0 :(得分:3)

此行对调用者完全没有影响:

arr = brr;

所以在通话结束后, arr完全指向之前指向的地方 - 到现在无效的内存区域(因为你删除了它)。

如果这是一个C问题,我建议你使用指向指针的指针(string **arr)。但是,我觉得这在C ++程序中很讨厌。也许你想在某个地方使用引用?

答案 1 :(得分:2)

为函数

设置此签名
void func(string * & arr, string * & brr)

答案 2 :(得分:0)

@cnicutar正确诊断出问题;你需要通过引用传递arr(引用POINTER,而不是数组),让资金返回arr的新值,调用者可以分配。