C中的堆栈溢出错误,在任何步骤之前

C中的堆栈溢出错误,在任何步骤之前,c,visual-studio-2008,stack-overflow,C,Visual Studio 2008,Stack Overflow,当我尝试调试我的C程序时,甚至在编译器开始执行我得到的任何一行之前: “HistsToFields.exe中0x00468867处的未处理异常:0xC00000FD:堆栈溢出。” 我不知道如何发现问题,因为程序甚至还没有开始执行任何一行(或者至少我可以从编译器调试窗口看到这一点)。如果我的程序还没有执行任何一行,我怎么知道是什么导致了溢出? “当调试器中断时,它指向chkstk.asm中的一行” 我正在win7上使用Microsoft Visual Studio 2008 我将堆栈保留大小设置为

当我尝试调试我的C程序时,甚至在编译器开始执行我得到的任何一行之前: “HistsToFields.exe中0x00468867处的未处理异常:0xC00000FD:堆栈溢出。”

我不知道如何发现问题,因为程序甚至还没有开始执行任何一行(或者至少我可以从编译器调试窗口看到这一点)。如果我的程序还没有执行任何一行,我怎么知道是什么导致了溢出? “当调试器中断时,它指向chkstk.asm中的一行”

我正在win7上使用Microsoft Visual Studio 2008

我将堆栈保留大小设置为300000000

PS:以前在另一台机器上正常执行的程序

我有一个csv格式的数据库(120000 x 60),我需要将其更改为空格分隔。该程序(我自己没有编写)定义了输出文件的结构:

`struct  OutputFileContents {
    char    Filename[LINE_LEN];
    char    Title[LINE_LEN];
    int NVar;
    char    VarName[MAX_NVAR][LINE_LEN];
    char    ZoneTitle[LINE_LEN];
    int     NI;
    int     NJ;
    int     NK;
    double  Datums[MAX_NVAR];
    double  Data[MAX_NVAR][MAX_NPOINT];`  
最后一个数组“Data[][]”包含所有输出。因此是巨大的规模。 此数组大小“MAX_NPOINT”在项目的头源文件中设置,并且此头由项目中的多个程序使用

事先非常感谢。
艾哈迈德。

首先,IDE!=编译器!=调试器

其次,不管调试器调试应用程序失败的原因是什么——堆栈上如此巨大的数据集是一个严重的设计错误。修复该设计错误,调试器问题就会消失

至于调试器失败的原因。。。不知道。安装的内存太少?32位对64位平台?构造静态变量时的无限递归?如果不看你没有展示给我们的东西,比如来源、环境规格等,我们就不能说

编辑:如果缺少提示:在
main()
开始执行之前构造全局/静态数据对象。这些构造函数中的无限(或太深)递归可能触发堆栈溢出。(我假定C++错误而不是C,因为您给出的错误消息称“未处理异常”。
编辑2:您添加了一个需要转换为空格分隔的“数据库”。没有看到代码的其余部分:试图在内存中一次性完成整个转换不是一个好主意。读取记录、转换记录、写入记录。重复一遍。如果您需要“最长记录”之类的内容来确定输出格式,请以只读方式对输入进行一次迭代以查找输出大小,然后再次进行迭代以进行实际转换。

+1用于堆栈溢出引用。您在某个地方有一个无限递归。如果您遇到异常,则您的编译器不仅已启动,它已经完成,您已经运行了您的程序(失败)@hoohaahi编译器没有运行该程序。好的,但是100k行,60列如果您正在从csv转换为空格,您一次只需要读取一行!你不需要全部存储在内存中。好的,非常感谢,我将其中一个数组的大小从145000更改为32000,效果很好,但是现在我在处理所有数据时遇到了问题?对不起,我不擅长这个。处理如此大的数据库而不使用如此大的数组的另一个选择是什么?令人惊讶的是,您始终需要将整个数据集存储在内存中。你能增量地计算出你想要的吗?@Andrew Myers:请检查我问题的编辑版本。IDE、它启动的编译器和它启动的调试器之间的区别是迂腐的。此外,OP所描述的调试器的用户体验并不是调试器的失败。根据错误的性质,调试器在调用
main()
-调试器没有问题之前的设置过程中,在MS C库的一个模块中遇到了断点。用户体验的解决方案是查看调用堆栈,了解什么是
crt0.obj
@Heath Hunnicutt:正确的沟通不是迂腐的,而是必要的技能。“在编译器启动之前”或“在调试器启动之前”或“在程序启动之前”都是三件非常非常不同的事情。说你的意思,说你的意思。