我一直在研究一个接受数组和数组大小作为参数的函数。函数任务是创建第二个数组,其大小是第一个数组的两倍,将第一个数组的元素复制到第二个数组的前半部分,并将其余元素初始化为零。
如果我在函数中动态分配第二个数组,我只能让它工作。我怀疑这是因为一旦函数将控制权返回给调用函数,任何未动态分配的数组都会从内存中删除。换句话说,调用函数中的指针将指向垃圾数据,因为在扩展器函数中创建的第二个数组现在已经消失了。任何人都可以证实这一点吗?
这是以两种不同方式编写的函数。
这种方式有效
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)