c++ - 传递给函数的动态数组

标签 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";
} 

最佳答案

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

arr = brr;

因此,在调用之后,arr 准确地指向它之前指向的位置 - 现在无效的内存区域(因为您删除了它)。

如果这是一个 C 问题,我建议您使用指向指针的指针(string **arr)。然而,我觉得这在 C++ 程序中很糟糕。也许您想在某处使用引用?

关于c++ - 传递给函数的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9167540/

相关文章:

基于数组的 PHP 路由,如何将 * 匹配到任何东西

c - 不寻常的 C 函数声明

function - 多匹配查询功能得分

c++ - 如何触发 WSAOVERLAPPED 事件? (C++)

c++ - Vectors 上的数组下标运算符

c - 使用 strcpy() 的结构的 char 数组成员出现段错误

PHP 使用 URL 中的过滤器作为查询中的参数进行选择

Python 2.7 - 如何计算文件中的行数并进一步使用结果

c++ - 如何在配置文件中隐藏数据库密码

c++ - to_string().length() 在 c++ 中给出不正确的结果。谁能向我解释一下这种行为吗?