0

我在运行时遇到崩溃错误,不知道该函数到底该怎么做或如何获取它的数据。

功能详情

编写一个接受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;
}
4

2 回答 2

1

首先,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;
}
于 2012-04-18T05:10:55.260 回答
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
}
于 2012-04-18T05:19:14.463 回答