我在运行时遇到崩溃错误,并且不确定该函数究竟是如何处理的,或者如何为它获取数据。
编写一个接受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;
}
答案 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
}