- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须分配一些内存来为此消息上的 WPARAM 创建一个奇怪的结构,但是在调用 PostMessage 后,我无法释放内存,除非程序崩溃,并提示存在堆损坏。
void DropFileMsg(HWND hWind,char* file_path)
{
DROPFILES* drop_data = (DROPFILES*)malloc(2048);
char* files = (char*)drop_data+sizeof(DROPFILES);
ZeroMemory(drop_data,2048);
drop_data->pFiles = sizeof(DROPFILES);
drop_data->pt.x=0;
drop_data->pt.y=0;
drop_data->fNC=false;
drop_data->fWide=false;
strcpy(files,file_path);
PostMessage(hWind, WM_DROPFILES, (WPARAM)drop_data, NULL);
free(drop_data);
}
堆损坏错误:指定给 RtlGetUserInfoHeap(002F0000, 00300018) 的地址无效
如果没有free
,也没有PostMessage
,这完全可以正常工作,但两者都不能。这是为什么?
这与它被过早释放无关,如最佳答案中所建议的,停止投票。如果是这种情况,这个问题就不是关于堆损坏的问题,而是会导致访问冲突。
最佳答案
这可能是因为 WM_DROPFILES
消息的接收者使用了该指针,但您已经取消分配它,因此指针现在指向未分配的内存,并且您有 undefined behavior .
与其释放内存,为什么不让接收者在完成后释放内存?
关于c++ - WM_DROPFILES 之后 free() 上的堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25519847/
我正在使用 Embarcadero RAD Studio XE 来开发应用程序。我正在尝试使用以下代码将文件拖放到应用程序 TMainForm = class(TForm) public: pro
我必须分配一些内存来为此消息上的 WPARAM 创建一个奇怪的结构,但是在调用 PostMessage 后,我无法释放内存,除非程序崩溃,并提示存在堆损坏。 void DropFileMsg(HWND
我正在尝试创建一个简单的应用程序,用户可以在其中将文件从窗口外部(通常是资源管理器)拖放到窗口内部的区域中。我的最终目的是获取文件路径以便稍后对其进行处理。 目前我可以将文件拖放到该区域,但我从未收到
我想使用 Lazarus 创建 Windows GUI 应用程序,它能够将文件从资源管理器拖到 TEdit 小部件并显示文件路径。 我已经阅读并尝试了一些 delphi 教程,它说你需要处理 WM_D
所以我一直在拼命地尝试自动化拖放功能,并将我对解决方案的搜索范围缩小到相当精炼的代码块: // DragAndDrop.cpp : Defines the entry point for the co
我是一名优秀的程序员,十分优秀!