小编Tcr*_*umb的帖子

为什么必须为该函数动态分配扩展数组才能正常工作 C++

我一直在研究一个接受数组和数组大小作为参数的函数。函数任务是创建第二个数组,其大小是第一个数组的两倍,将第一个数组的元素复制到第二个数组的前半部分,并将其余元素初始化为零。

如果我在函数中动态分配第二个数组,我只能让它工作。我怀疑这是因为一旦函数将控制权返回给调用函数,任何未动态分配的数组都会从内存中删除。换句话说,调用函数中的指针将指向垃圾数据,因为在扩展器函数中创建的第二个数组现在已经消失了。任何人都可以证实这一点吗?

这是以两种不同方式编写的函数。

这种方式有效

int *array_expander(int array[], int size)
{

    int *new_array = new int[size*2];

    for(int i{0}; i < size; i++)
        *(new_array + i) = *(array + i);

    for(int i{size}; i < size * 2; i++)
        *(new_array + i) = 0;

    return new_array;
}
Run Code Online (Sandbox Code Playgroud)

这种方式不

int *array_expander(int array[], int size)
{
    int new_array[size * 2];

    for(int i{0}; i < size; i++)
        *(new_array + i) = *(array + i);

    for(int i{size}; i < size * 2; i++)
        *(new_array + i) = …
Run Code Online (Sandbox Code Playgroud)

c++ arrays scope memory-management

4
推荐指数
1
解决办法
72
查看次数

标签 统计

arrays ×1

c++ ×1

memory-management ×1

scope ×1