C++:奇怪的分段错误

Kle*_*eas 2 c++ printing

我想用C++打印一些东西.但是,我遇到了一个让我一无所知的奇怪错误,我使用以下代码:

PRINTDLG pd;
ZeroMemory(&pd, sizeof(pd));
pd.lStructSize = sizeof(pd);
pd.Flags = PD_RETURNDEFAULT;
PrintDlg(&pd);

// Set landscape
DEVMODE* pDevMode = (DEVMODE*)GlobalLock(pd.hDevMode);
pDevMode->dmOrientation = DMORIENT_LANDSCAPE;
pd.hwndOwner = mainWindow;
pd.Flags = PD_RETURNDC | PD_NOSELECTION;
GlobalUnlock(pd.hDevMode);

if (PrintDlg(&pd))
{
    DOCINFO di;

    di.cbSize       = sizeof(DOCINFO);
    di.lpszDocName  = "Test Print";
    di.lpszOutput   = (LPTSTR)NULL;
    di.fwType       = 0;

    //start printing
    StartDoc(pd.hDC, &di);

    int a;
    int b;
    int c;
    int d;
    int e;
    int f;
    // int g; // Uncomment this -> CRASH

    EndDoc(pd.hDC);
    DeleteDC(pd.hDC);
}
else
{
    cout << "Did not print: " <<  CommDlgExtendedError()  << endl;
}
Run Code Online (Sandbox Code Playgroud)

我取消注意'int g;'的那一刻 我得到一个:"程序收到信号SIGSEGV,分段错误." 我使用代码块和mingw编译器,都是最新的.可能是什么导致了这个?

Pup*_*ppy 6

这意味着您损坏了堆栈.您放入堆栈的整数恰好位于损坏的数据中.因此,通过在堆栈上放置额外的int,您基本上丢弃了损坏的内存.如果你没有放置足够的整数,那么你将覆盖诸如函数返回地址,寄存器的堆栈支持等等,这很容易导致分段错误.