gpt4 book ai didi

C++:奇怪的段错误

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:08 26 4
gpt4 key购买 nike

我正在尝试使用 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;
}

我取消注释“int g;”的那一刻我得到:“程序收到信号 SIGSEGV,段错误。”我使用最新的代码块和 mingw 编译器。是什么原因造成的?

最佳答案

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

关于C++:奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3014011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com