繁体   English   中英

当我使用包含许多数字的文件时,“运行时检查错误#2-围绕变量“ arr”的堆栈已损坏”

[英]“Run-Time Check Error #2 - Stack around the variable ”arr“ was corrupted” when I use a file with many numbers

这应该最多将一个文件中的1000个数字读取到一个数组中,然后对其进行分析。 除非我使用其中包含一百万个数字的文件,否则它可以正常工作。 我可能是因为我有一个无限循环,但找不到位置。 我不应该超过1000个元素。

#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
const long N=1000;

using namespace std;
//declaring the functions
int readArray(ifstream& ifile, long arr[]);
void sortArray(long arr[], int numberInTheArray);


int main()
{
    //variable declaration
    int n=0;
    int i=0;
    int numberInTheArray=0;
    long minimum=0;
    long maximum=0;
    long arr[N]={0};
    ifstream ifile;
    string strVar;

    cout << "Input File Name: ";
    cin >> strVar;
    cout << "Which number do you want to return? ";
    cin >> i;
    cout << endl;

    ifile.open(strVar.c_str());

     if(!ifile)
    {
        cout << "That file does not exist!" << endl;
        return 1;
    }
    numberInTheArray = readArray(ifile,arr);

    if (numberInTheArray == 0){
        cout << "The file is empty!" << endl;
    }

    else{
    maximum = arr[n];
    minimum = arr[n];
    n++;

    while (n<=N){
        if (arr[n] <= minimum){
            minimum = arr[n];
        }
        if (arr [n] >= maximum){
            maximum = arr[n];
        }
        n++;
    }

    cout << "Before Sort:\n" << " Min is {" << minimum << "}.\n" << " Max is {" 
        << maximum << "}.\n";

    if (i>N){
        cout << " " << i << " is bigger than 1000!" << endl;
    }

    else if (numberInTheArray < N){
        cout << " WARNING: Only " << numberInTheArray 
            << " numbers were read into the array!" << endl;
        if (i <= numberInTheArray){
            cout << " Value " << i << " is {" << arr[i-1] << "}." << endl;
        }
        else {
            cout << " There aren't that many numbers in the array!" << endl;
        }
    }

    else {
        cout << " Value " << i << " is {" << arr[i-1] << "}." << endl;
    }

    sortArray(arr,numberInTheArray);

    cout << "\nAfter Sort:\n" << " Min is {" << minimum << "}.\n" << " Max is {" 
        << maximum << "}.\n";

    if (i>N){
        cout << " " << i << " is bigger than 1000!" << endl;
    }

    else if (numberInTheArray < N){
        cout << " WARNING: Only " << numberInTheArray 
            << " numbers were read into the array!" << endl;
        if (i <= numberInTheArray){
            cout << " Value " << i << " is {" << arr[i-1] << "}." << endl;
        }
        else {
            cout << " There aren't that many numbers in the array!" << endl;
        }
    }
    else {
        cout << " Value " << i << " is {" << arr[i-1] << "}." << endl;
    }
    }
    return 0;
}

int readArray(ifstream& ifile, long arr[])
{
    int n=0;
    long num;

    while (n<=N && ifile){
        ifile >> arr[n];
        n++;
    }
    n=n-1;
    return n;
}

void sortArray(long arr[], int numberInTheArray)
{
    int a;
    int b;
    int temp;

    for (a=0; a<numberInTheArray; a++)
    {
        for (b=0; b<numberInTheArray; b++)
        {
            if (arr[a] < arr[b])
            {
                temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
            }
        }
    }
}

问题是您的循环条件n <= N 请记住,数组索引从零到大小减去一 ,因此条件应为n < N

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM