C++ 访问冲突堆栈溢出c++;

C++ 访问冲突堆栈溢出c++;,c++,stack,overflow,C++,Stack,Overflow,每个人 我在C++中很新… 我的问题是在C++ Visual Studio 2012……/P>中读取大文本文件。 以下是我的简单代码: #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { double x; int i,j; ifstream inFile; i=0; j=0; d

每个人

我在C++中很新… 我的问题是在C++ Visual Studio 2012……/P>中读取大文本文件。 以下是我的简单代码:

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

int main() {
    double x;
    int i,j;
    ifstream inFile;
    i=0;
    j=0;



 double x_array[800050][1] ;

    x = 0;
    inFile.open("D:\\a.txt");
    if (!inFile) {
        cout << "Unable to open file";
        exit(1); // terminate with error
    }

    while (inFile >> x) {

                         x_array[i][0]=x;
                         i++;

    }

    inFile.close();
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main(){
双x;
int i,j;
河流充填;
i=0;
j=0;
双x_阵列[800050][1];
x=0;
infle.open(“D:\\a.txt”);
如果(!infle){
cout>x){
x_数组[i][0]=x;
i++;
}
infle.close();
返回0;
}
但在调试代码时,遇到以下错误:

textreader.exe中0x01242327处未处理的异常:0xC00000FD:堆栈溢出(参数:0x00000000,0x00E42000)。

当我减小输入文本文件的大小(减少输入数)时,问题就解决了…但我需要整个输入文本文件

我应该怎么做?问题出在代码中,或者我应该找到更好的方法?

您(如错误中所述)在分配时正在执行堆栈溢出:

  double x_array[800050][1] ;

您应该尝试在堆上分配它(直接使用new,或间接使用std::vector之类的std容器)

自动变量通常放置在调用堆栈上。大多数桌面系统上调用堆栈的默认大小为1到几兆字节。
double[800050][1]
的大小超过6兆字节(假设大小加倍为8字节)。正如您所观察到的,使用如此巨大的自动变量会导致堆栈溢出

不要对大型对象使用自动变量。您可以动态分配对象。在这种情况下,您可以使用
std::vector


另一个问题是,您硬编码了数组的大小,因此即使它确实适合堆栈,也有可能溢出数组。当您使用
std::vector
时,您可以让它动态增长,而不是硬编码大小。

使用向量,而不是数组。当您减小输入文件的大小时,错误消失。您必须我没有告诉我们临界大小,也没有告诉我们错误发生的时间,但我会冒险猜测,当你尝试将800051号放入数组时,问题就来了。你想用这个数字编程做什么?这并不能解决问题,但要养成用有意义的值初始化对象的习惯,而不是创建使用默认构造函数进行em,然后为其赋值。特别是,将
ifstream infle;…infle.open(“D:\\a.txt”);
更改为
ifstream infle(“D:\\a.txt”)
,将
int i;…i=0;
更改为
int i=0;
,并将
int j;…j=0;
更改为
int j=0;
。您无需调用
infle.close();
。析构函数将执行此操作。感谢所有回复…我的问题通过使用:std::vector x_array(800050)解决了;谢谢,@user207933您的回复…我在代码中多次使用了一个大矩阵…我使用了std::vector,我的问题得到了解决,但这个过程使我的执行时间非常慢…在代码的下一行中,我应该分配一个大小为(2048*2048*50)的矩阵几分钟后,编译器就用这个标题显示了错误:在COUNSOLAPPLICATION1.XE:微软C++异常中:在At0x76208B2中未处理的异常:STD::BADYOLL在内存位置0x00 D1ED0C。谢谢,@ OZNOG为您的答复…我在代码中使用了一个大矩阵几次…我使用了STD::向量,我的问题得到解决,B这个过程使我的执行时间太慢了…在我的代码中的下一行,我应该分配一个大小为(2048×2048×50)的矩阵,在那一分钟之后,编译器用这个标题显示错误:在COUNSOLAPPLIATION1.XE:微软C++异常:STD::BADYOLL在内存位置0x00 D1ED0C中的未处理的异常。