为什么我的数组双精度函数不起作用?

Why does my array double function not work?

本文关键字:不起作用 函数 双精度 我的 数组 为什么      更新时间:2023-10-16

我尝试创建一个函数,将传入其中的数组加倍,只有一个for循环,并将int 0添加到每个没有先前值的额外索引中。

我发现最后 3 个元素最终被打印为内存地址。

为什么这不起作用,我该如何解决?

例:

int array[] = { 3,5,6 };
int size = 3;
arrayDouble(array,size)
int array[] = { 3,5,6,0,0,0 }; //expected output

#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
int * arrayDouble(int array[], int size);
int main()
{
int array[] = { 3,5,6 };
int size = 3;
int * ptrarray = arrayDouble(array, size);
}
int * arrayDouble(int array[], int size)
{
int *new_array = new int[size * 2];
for (int i = 1; i <= size * 2; i++)
{
if (i > (size * 2))
{
new_array[i - 1] = 0;
}
new_array[i - 1] = array[i - 1];
}
for (int i = 0; i < size * 2; i++)
{
cout << new_array[i];
}
return new_array;
}

其他人已经指出了你的循环的问题。 但是,如果在使用new[]时默认初始化条目,则不需要两个循环。

此外,如果您使用std::copy将数据从一个数组复制到另一个数组,则甚至不需要任何循环。

例:

int* arrayDouble(int array[], int size)
{
int *new_array = new int[size * 2]();  // <-- Note the () to value-initialize the memory
std::copy(array, array + size, new_array); // <-- Use copy to copy over the values to new_array
// print results
for (int i = 0; i < size * 2; i++)
std::cout << new_array[i] << " ";
return new_array;
} 

现场示例

()将自动将条目设置为double的默认值,即 0。

在 C++ 11 中,您还可以使用大括号初始值设定项:

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

但是,当std::vector已经完成了所有这些工作并且没有潜在内存泄漏的问题时,为什么要这样做。

#include <iostream>
#include <vector>
int main()
{
std::vector<int> array = { 3,5,6 };
array.resize(array.size() * 2);
for (auto v : array)
std::cout << v << " ";
}

现场示例

本节

for (int i = 1; i <= size * 2; i++)
{
if (i > (size * 2)) // this never evaluates to true?
{
new_array[i - 1] = 0;
}
new_array[i - 1] = array[i - 1]; // this always happens
}

真的应该是

for (int i = 0; i < size * 2; i++)
{
if (i > size)
{
new_array[i] = 0;
}else{
new_array[i] = array[i];
}
}

此外,如果不管理正在创建的所有这些数组,则可能会遇到内存泄漏。

你的 for 循环很不稳定

for (int i = 1; i <= size * 2; i++)
{
if (i > (size * 2))
{
new_array[i - 1] = 0;
}
new_array[i - 1] = array[i - 1];
}

应该看起来像这样

for (int i = 0; i < size * 2; i++) //easier to understand if you just start with 0
{
if (i > size) //you don't need to multiply by 2!!
{
new_array[i] = 0;
}
new_array[i] = array[i];
}

那应该为您解决它

我搞砸了。我没有看到我把尺寸 * 2