Stack around the variable 'info' was corrupted.

codebm 2010-10-04 06:37:20
新建个WIN32项目(非空),把这段代码覆盖原有的WndProc函数

在DEBUG就会Stack around the variable 'info' was corrupted.

求解



LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
//static BITMAPINFO info;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜单选择:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:

{
//
//HDC hdcScreen = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);
HDC hdcScreen = GetDC(NULL);

HDC hdc = GetDC(hWnd);
//一个memory dc和一个bitmap(ddb)
HDC hCompatibleDC = CreateCompatibleDC(hdcScreen);
HBITMAP hBitMap = CreateCompatibleBitmap(hdcScreen, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES));
::SelectObject(hCompatibleDC, hBitMap);

//拷贝surface的数据到bitmap里
::BitBlt(hCompatibleDC, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), hdcScreen, 0, 0, SRCCOPY);



//ddb->dib
BITMAPINFO info;
::memset(&info, 0, sizeof(info));
info.bmiHeader.biBitCount = 4;
info.bmiHeader.biSize = sizeof(info.bmiHeader);
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biCompression = BI_RGB;

info.bmiHeader.biWidth = GetDeviceCaps(hdcScreen, HORZRES);
info.bmiHeader.biHeight = GetDeviceCaps(hdcScreen, VERTRES);
char *buff = new char[GetDeviceCaps(hdcScreen, HORZRES) * GetDeviceCaps(hdcScreen, VERTRES) * 3];
if(!GetDIBits(hCompatibleDC, hBitMap, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS))
::MessageBox(hWnd, NULL, NULL, MB_OK);;

//dib->surface

SetDIBitsToDevice(hdc, 0, 0, GetDeviceCaps(hdcScreen, HORZRES), GetDeviceCaps(hdcScreen, VERTRES), 0, 0, 0, GetDeviceCaps(hdcScreen, VERTRES), buff, &info, DIB_PAL_COLORS);
/* */
//释放
delete []buff;
buff = 0;
::DeleteDC(hCompatibleDC);
::DeleteObject(hBitMap);
ReleaseDC(hWnd, hdc);
ReleaseDC(NULL, hdcScreen);

//DeleteDC(hdcScreen);
}//DestroyWindow(hWnd);


break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

...全文
1147 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
colander 2011-12-07
  • 打赏
  • 举报
回复
delete之后赋成0不会错的,这样可以防止野指针。

但是不知道为什么会栈溢出,我也遇到过类似的问题,到底怎么回事啊?
hexuyue520 2011-11-02
  • 打赏
  • 举报
回复
溢出,这属于溢出了吧
codebm 2010-10-05
  • 打赏
  • 举报
回复
个人习惯。。

以免再用buff的时候引起问题

这个又不影响。
看不见的裂痕 2010-10-04
  • 打赏
  • 举报
回复
你那个buff=0;是啥,不都delete了还用buff?
内容概要:本文围绕“空地多无人平台协同路径规划技术”的论文复现展开,重点介绍了基于Matlab的多无人机与地面无人平台协同路径规划的算法实现与仿真研究。研究系统性地整合了无人机三维路径规划、动态避障、多机协同、任务分配及防撞机制等核心技术,结合智能优化算法(如遗传算法、粒子群算法、灰狼优化算法等)与经典路径规划模型(如Dubins路径、A*、RRT等),在复杂威胁环境下实现了高效、安全的协同路径规划。文中提供了完整的Matlab代码支持,便于科研人员进行算法验证、性能对比与二次开发,并强调通过复现高水平学术论文(如EI、SCI期刊及硕博论文)深入掌握该领域的前沿方法与技术路线。; 适合人群:具备一定Matlab编程基础,从事无人机系统、自动化控制、人工智能、路径规划等相关领域研究的研究生、科研人员及工程技术人员,尤其适用于正在开展科研项目、撰写学位论文或希望提升算法实践能力的研究者。; 使用场景及目标:① 复现并深入理解空地协同路径规划领域的高水平论文算法;② 掌握Matlab在多智能体路径规划中的建模、仿真与可视化方法;③ 应用于科研课题、毕业设计、项目申报及算法创新实践中,提升研究的技术深度与工程可行性。; 阅读建议:建议结合文中提供的网盘资源(含完整代码、仿真模型及参考文献资料)同步学习,优先选择与自身研究方向契合的案例进行复现,注重算法原理与代码实现之间的映射关系,并在掌握基础方案后尝试进行参数调优、算法融合或引入新约束条件以实现改进与创新。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧