将元素从一个数组复制到另一个数组

时间:2012-04-18 04:51:35

标签: c++ arrays function element

我在运行时遇到崩溃错误,并且不确定该函数究竟是如何处理的,或者如何为它获取数据。

功能详情

编写一个接受int数组和size作为参数的函数,然后创建一个比给定大一个元素的新数组。将第一个元素设置为0,然后将参数数组中的内容复制到新数组。

主要细节

在从输入中读取int n的程序中使用,然后从文件数据名int n中读取data 将它传递给元素移位器,然后将其打印到输出(每行一个)。

#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

int element_shift(int elmts[], int size) {
  int new_size = size + 1;
  int shifter[new_size];
  int *elmt_sft;
  shifter[0] = 0;
  for (int i = 1; i >= new_size; i++) {
    shifter[i + 1] = elmts[i];
  }
  return *elmt_sft;
}

int main() {
  fstream infile;
  infile.open("D:\\data.txt");
  int n, x;
  infile >> x;
  cout << "size of array: ";
  cin >> n;
  const int ARRAY_SIZE = n + x;
  int elements[ARRAY_SIZE];
  element_shift(elements, ARRAY_SIZE);

  system("PAUSE");
  return EXIT_SUCCESS;
}

2 个答案:

答案 0 :(得分:1)

首先,main函数中声明的ARRAY_SIZE不是常量变量,而是根据用户输入在运行时定义的。这意味着应该动态创建数组elements。另一方面,您阅读了一些x变量,该变量仅用于定义数组的大小,并且根本没有初始化数组。我猜问题语句是从输入中读取数组的大小,然后从文件中读取数组的数据。

element_shift函数中也存在很多错误。

您的代码应该类似于以下内容:

#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

void element_shift(int* elmts, int size)
{
    int new_size = size + 1;
    int* shifter = new int[new_size];
    shifter[0] = 0;
    for(int i = 0; i < size; ++i)
    {
        shifter[i + 1] = elmts[i];
    }
    delete [] elmts;
    elmts = shifter;
}


int main()
{
    fstream infile;
    infile.open("D:\\data.txt");

    int n;
    cout << "size of array: ";
    cin >> n;

    int* elements = new int[n];

    for (int i = 0; i < n; ++i) {
        infile >> elements[i];
    }

    element_shift(elements, n);

    for (int i = 0; i < n; ++i) {
        std::cout << elements[i] << std::endl;
    }

    return EXIT_SUCCESS;
}

答案 1 :(得分:0)

首先,您花了很多时间创建移位阵列,但不要将其返回。

int element_shift(int elmts[], int size) {
  int new_size = size + 1;
  int shifter[new_size];
  int *elmt_sft;
  shifter[0] = 0;
  for (int i = 1; i >= new_size; i++) {
    shifter[i + 1] = elmts[i];
  }
  return *elmt_sft;
}

永远不会分配elmt_sft指针。您正尝试使用*elmt_sft访问不存在的内存。这可能会导致您的错误。此函数也无法返回新数组shifter,因为该变量是本地声明的,并且一旦函数退出就会消失。如果你想在函数中创建一些新东西,并且在函数退出后仍然将它放在内存中,我建议动态创建数组并返回指向它的指针

这是未经测试但应该从正确的方向开始。它将返回一个单独的动态分配的数组,该数组不会覆盖另一个数组。

int* element_shift(int elmts[], int size) {
  int *result_array = new int[size + 1]; //dynamically create new array MAKE SURE TO DELETE
  result_array[0] = 0; //set 0 index to 0
  for (int i = 1; i < size + 1; i++)//start at 1 of the result and put value in
  {
    result_array[i] = elmts[i - 1];
  }
  return result_array; //returning pointer
}