Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
我在编译可以但在到达InitInstance()之前启动时崩溃的项目遇到了麻烦。
在将字符串添加到结构后,会发生这种情况:
当我添加结构的最后一个成员时,问题就开始了。如果我将数组大小减小为较小的数字(例如12),则该应用程序正常运行。
我在chkstk.asm中崩溃-与此代码有关:
我正在Windows 7 Ultimate 64位上编译32位c ++应用程序。 Msvc 2010。
我不是要调试我的代码。仅包含代码来显示触发崩溃的原因及其发生的位置。
有任何想法吗?
谢谢你的帮助!
想改善这个问题吗? 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/