为什么我的数组双精度函数不起作用?
Why does my array double function not work?
我尝试创建一个函数,将传入其中的数组加倍,只有一个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
相关文章:
- C++为什么尽管我调用了void函数,它却不起作用
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 为什么我的数组双精度函数不起作用?
- 使用 va_arg 传递给函数va_list不起作用
- Windows.h 输入在函数之外不起作用
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 类中的虚拟布尔函数参数不起作用
- getline 函数似乎在 C++ 中不起作用
- 将新放置与 std::函数一起使用不起作用
- binary_search() 函数在我的函数体中不起作用
- 为什么读取函数在 sha1 c++ 实现中不起作用?
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 指针变量在 cout 函数中不起作用
- std::函数不起作用,但普通的旧函数指针可以 - 为什么?
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 为什么必须使用'*p=a',而使用'p=&a'在构造函数中不起作用
- C++ Arduino - 随机函数不起作用
- QObject::连接不起作用 - 使用函数语法找不到信号
- 函数在类中不起作用-函数调用缺少参数列表