尝试调试程序时遇到此错误。似乎它甚至不能接受我传递给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的事实,这几乎可以肯定是一些防御性代码,用于检查是否耗尽了堆栈(因此chkstkcheck stack)生成优先机会异常。

10-08 09:27