Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
我在编译可以但在到达InitInstance()之前启动时崩溃的项目遇到了麻烦。
在将字符串添加到结构后,会发生这种情况:

typedef struct
{
long            nChannelIndex;
TCHAR           szChannelName[32];
DWORD           dwStartTime;        // time_t
DWORD           dwPlaytimeMs;       // msecs
TCHAR           szStepName[32];
TCHAR           szFilename[MAX_PATH];
long            nLenMs;
TCHAR           szStepDescr[64];
DWORD           dwSessionID;
TCHAR           szLocationName[32];
long            bInsertion;
BOOL            nOrigin;        // 0= local,  1= cuemaster,
TCHAR           szList[32];
TCHAR           szFSPath[MAX_PATH];  <<  THIS HERE IS THE PROBLEM
}REPORTDATA, *LPREPORTDATA;


当我添加结构的最后一个成员时,问题就开始了。如果我将数组大小减小为较小的数字(例如12),则该应用程序正常运行。

我在chkstk.asm中崩溃-与此代码有关:

; Find next lower page and probe
cs20:
sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
test    dword ptr [eax],eax     ; probe page.
jmp     short cs10


我正在Windows 7 Ultimate 64位上编译32位c ++应用程序。 Msvc 2010。

我不是要调试我的代码。仅包含代码来显示触发崩溃的原因及其发生的位置。

有任何想法吗?
谢谢你的帮助!

最佳答案

发生崩溃的模块的名称chkstk.asm是正在发生的事情的线索。它正在检查堆栈分配,以确保您没有用完。通过向结构中添加一个大的新元素,看来您已经用完了。用单个结构耗尽堆栈空间非常困难,因此我假设您有一个数组。局部变量是分配给堆栈的内容,因此问题很可能是包含这些结构数组的局部变量。

您可以使用/F compiler switch为程序提供更多的堆栈空间。

您也可以使用vector代替数组,这将在堆中而不是堆栈中分配空间。

关于c++ - 修改结构后应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38854133/

10-11 23:00
查看更多