2011-06-07 59 views
1

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

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

我在win7上使用Microsoft Visual Studio 2008。

我设置堆栈保留大小3亿

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];` 

这最后一个数组“数据[] []”就是包含了所有的输出。因此是巨大的尺寸。 该数组大小“MAX_NPOINT”在项目中的标题源文件中设置,该标题由项目中的多个程序使用。

非常感谢您提前。 艾哈迈德。

+1

+1堆栈溢出引用。 – 2011-06-07 15:43:04

+4

你有一个无限递归的地方。 – 2011-06-07 15:43:24

+3

如果你得到一个异常,那么你的编译器不仅已经启动,它已经完成,并且你已经运行了你的程序(失败了)。 – Arafangion 2011-06-07 15:45:43

回答

3

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

其次,无论调试器调试应用程序失败的原因是什么 - 一个庞大的数据集,是一个严重的设计错误。修复设计错误,并且您的调试器问题将消失。

至于为什么调试器失败......不知道。内存太少安装? 32位和64位平台?无限递归构造静态变量?真的不能说,不看东西,你还没有给我们,像源,环境的规格等

编辑:如果提示错过:全局/静态数据对象之前main()开始建造执行。这些构造函数中的无限(或太深)递归可能会触发堆栈溢出。 (我假设C++代替C,因为您给出的错误消息是“未处理的异常”。)

编辑2:您添加了需要转换为空格分隔的“数据库”。没有看到代码的其余部分:试图在内存中执行整个转换并不是一个好主意。读一条记录,转换它,写下它。重复。如果你需要诸如“最长记录”之类的东西来确定输出格式,那么为了查找输出大小而迭代一次只读输入,然后再次进行实际转换。

+0

好吧非常感谢你,我将数组大小从145000改为32000,它运行良好,但现在我会遇到处理所有数据的问题?对不起,我不擅长这一点。如果不使用阵列那么大,处理这种大型数据库的其他选择是什么? – hoohaahii 2011-06-07 16:37:16

+0

你想用数据做什么?令人惊讶的是,您始终需要内存中的全部数据集。你可以逐步计算你想要的任何东西吗? – asm 2011-06-07 17:05:44

+0

@Andrew Myers:请检查我的问题的编辑版本。 – hoohaahii 2011-06-07 18:13:02