c++ - 修改结构后应用程序崩溃

标签 c++ windows visual-studio-2010

<分区>

我遇到了一个项目,该项目编译正常,但在启动时甚至在到达 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/

相关文章:

c++ - 在哪里初始化另一个对话框上的丰富编辑控件?

mysql - 如何将文件从C盘复制到网络文件夹?

windows - 为来自 delphi 的 PDF 文件添加资源管理器上下文菜单项

c++ - Visual Studio不断引用旧文件

visual-studio-2010 - dbproj : error : Error HRESULT E_FAIL has been returned from a call to a COM component

c++ - libcurl curl_easy_setopt 长参数未正确传递 - va_arg(param, long)

c++ - 在左侧创建一个菜单

c++ - 键盘重复计数

.net - 免注册COM可以应用于DLL吗?

c++ - 如何在类/函数模板中传递无效参数