尝试调试程序时遇到此错误。似乎它甚至不能接受我传递给main函数的参数:
int main(int argc, char* argv[]){
if(argc!=4) std::cout<<wrong input";
else{
//other codes
}
return 0;
}
我将断点放在第一行(主功能行)上,它给了我以下错误:
'MESH.exe': Loaded 'C:\Users\Avan\Documents\NUS\Yr3_Sem2\CS3242\MESH\Debug\MESH.exe', Symbols loaded.
'MESH.exe': Loaded 'C:\Windows\SysWOW64\ntdll.dll', Symbols loaded (source information stripped).
'MESH.exe': Loaded 'C:\Windows\SysWOW64\kernel32.dll', Symbols loaded (source information stripped).
'MESH.exe': Loaded 'C:\Windows\SysWOW64\KernelBase.dll', Symbols loaded (source information stripped).
'MESH.exe': Loaded 'C:\Windows\SysWOW64\msvcp100d.dll', Symbols loaded (source information stripped).
'MESH.exe': Loaded 'C:\Windows\SysWOW64\msvcr100d.dll', Symbols loaded (source information stripped).
First-chance exception at 0x00318c67 in MESH.exe: 0xC00000FD: Stack overflow.
Unhandled exception at 0x00318c67 in MESH.exe: 0xC00000FD: Stack overflow.
First-chance exception at 0x00318c67 in MESH.exe: 0xC0000005: Access violation reading location 0x003a0000.
Unhandled exception at 0x00318c67 in MESH.exe: 0xC0000005: Access violation reading location 0x003a0000.
The program '[4800] MESH.exe: Native' has exited with code -1073741819 (0xc0000005).
因此,我认为错误是由于我向下传递输入时产生的。
我已经在project-> properties-> debugging中设置了命令行输入参数
该错误不断指向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
_chkstk endp
end
指针继续指向上面用**指示的行。谁能告诉我可能出了什么问题?
最佳答案
好吧,鉴于它抱怨堆栈溢出,我首先要看的是您是否要在堆栈上分配很多东西。
例如,如果您的//other codes
包含以下内容:
int bigarray[9999999999];
那可能是罪魁祸首。
我不会太担心错误来自
chkstk.asm
的事实,这几乎可以肯定是一些防御性代码,用于检查是否耗尽了堆栈(因此chkstk
为check stack
)生成优先机会异常。