- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Visual Studio 2010 中使用 openCV 2.4.10 编写了一个简单的代码,它从一些输入文件中提取了一些特征。
Mat extractSIFT(Mat img)
{
cv::Ptr<cv::FeatureDetector> detector;
cv::Ptr<cv::Feature2D> descriptorExtractor;
detector = cv::FeatureDetector::create("Dense");
descriptorExtractor = cv::DescriptorExtractor::create("SIFT");
detector->set("initXyStep",GRID_SPACING);
vector<cv::KeyPoint> keypoints;
detector->detect(img,keypoints);
Mat o;
//Mat o(keypoints.size(),128,CV_8U);
descriptorExtractor->compute(img,keypoints,o);
return o;
}
虽然这段代码在 Debug模式下工作正常(虽然速度很慢),但它给出了这个错误:
Windows has triggered a breakpoint in Prototype.exe.
This may be due to a corruption of the heap, which indicates a bug in Prototype.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while Prototype.exe has focus.
The output window may have more diagnostic information.
经过进一步调查,我发现输出变量 o 在 Release模式下看不到(悬停),但可以在简单的控制台转储上打印值。
在反汇编器中:
848: //Mat o(keypoints.size(),128,CV_8U);
849: descriptorExtractor->compute(img,keypoints,o);
850:
851: return o;
013F6FCF 56 push esi
013F6FD0 8D 55 C0 lea edx,[keypoints]
013F6FD3 52 push edx
013F6FD4 8D 45 0C lea eax,[img]
013F6FD7 50 push eax
013F6FD8 8B CF mov ecx,edi
013F6FDA C7 45 F0 01 00 00 00 mov dword ptr [ebp-10h],1
013F6FE1 E8 42 35 02 00 call cv::Feature2D::compute (141A528h)
013F6FE6 8B 45 C0 mov eax,dword ptr [keypoints]
013F6FE9 3B C3 cmp eax,ebx
013F6FEB 74 09 je extractSIFT4+306h (13F6FF6h)
013F6FED 50 push eax
**013F6FEE E8 EC 5C 02 00 call operator delete (141CCDFh)**
013F6FF3 83 C4 04 add esp,4
错误与星号一致。我尝试了几个项目属性(/Md、MT、增量构建...)重新编译了 openCV,检查了平台版本(v100)但无济于事。
最佳答案
对于任何类型的堆损坏,Microsoft Application Verifier(免费软件)都是非常宝贵的。您需要使用 Basics\Heaps 检查来配置它,我建议第一次禁用所有其他检查。保存设置后,您需要重新启动程序。它会恰好在损坏点崩溃。
例如:假设您在堆上分配了 100 个字节,然后尝试写入 101 个字节。在调试版本中,C++ CRT 将在 block 前后添加一些额外的填充,这将防止和检测小的堆损坏。在 Release 版本中,没有填充并且堆被损坏,而在其他一些堆操作的时刻,您通常知道得太晚了。使用 Application Verifier,您的程序将在写入第 101 个字节时恰好崩溃到调试器中。当它发生时,您可以在 Visual Studio 的输出窗口中看到一些额外的详细信息。
(注意:我始终为我开发的程序启用 Application Verifier with Basics\Heaps)
在这种特定情况下,您可能会看到 vector 的析构函数导致崩溃。这将意味着没有发生堆损坏,但程序正在尝试删除一个不存在的堆 block 。这很可能是由于链接了使用不同编译器或不同调试/发布设置编译的 OpenCV。 vector
类的结构和分配的 block 填充在编译器和 Debug/Release 之间有所不同。
更新:现在我们知道不同的 CRT 是这种情况,这里有一个扩展的解释。
关于c++ - Release模式下的 OpenCV 堆损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30124620/
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我目前正在尝试制作一个非常简单的应用程序,它会根据一天中的时间问候。我的代码是: open System let read() = Console.Read() let readLine() = Co
我已经运行Elasticsearch服务很长时间了,但是突然遇到了以下情况 由以下原因导致:org.elasticsearch.index.translog.TranslogCorruptedExce
我对执行以下操作的 php 重定向脚本有一个奇怪的问题: 在用户的浏览器中植入 Cookie,或者读取现有 Cookie(如果有)。 将用户重定向到另一个网址(重定向的网址是原始网址中的参数,例如 h
我正在使用 iText 7.0.0(Java 风格),似乎表格单元格 HorizontalAlignment 被忽略,因为 CENTER 和 RIGHT 都不起作用。你能重现这个吗? see th
简而言之: 我有一个可以从多个线程访问的计数器变量。尽管我已经实现了多线程读/写保护,但该变量似乎仍然以不一致的方式同时写入,导致计数器结果不正确。 深入杂草: 我使用的“for 循环”会在后台触发大
我有一个 REST 项目,在访问控制服务类中保存用户的ArrayList。一切都工作正常,直到 REST Web 服务突然抛出 java.util.NoSuchElementException。单步查
已关闭。此问题不符合Stack Overflow guidelines 。它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
当我刷新页面时,我无法显示 voteUp/Down,因为如果我执行 voteUp/Down(+1 或 -1) 并刷新页面,这会再次返回 voteUp/Down (0)。过去我使用 JSON,但社区推荐
我正在为离散时间 CPU 调度模拟器编写代码。它只是生成流程并相应地安排它们。我目前正在实现 FCFS 计划。我理解离散时间模拟器的本质,但我在用 C++ 实现时遇到了麻烦。 问题出现在handleN
尝试使用 yum 部署包时出现错误: 2016-07-07 14:14:31,296 - ERROR - error: rpmdb: BDB0113 Thread/process 6723/1
我有一个简单的同步队列 template class SynchronisedQueue { public: void Enqueue(const T& d
我正在使用 hadoop 0.20.append 和 hbase 0.90.0。我将少量数据上传到 Hbase,然后出于评估目的杀死了 HMaster 和 Namenode。在此之后,我向 Hbase
我使用 symfony 框架 1.4 创建了一个网站。我正在使用 sfguard 进行身份验证。 现在,这在 WAMP (windows) 上运行良好。我可以在不同的浏览器上登录多个帐户并使用该网站。
目前我已经实现了 HashMap private static Map cached = new HashMap(); 和 Item 是一个具有属性的对象 Date expireTime 和 byte
我试图将 2 个不同的 WPF 控件绑定(bind)到 ViewModel 中的同一属性,即 CheckBox.IsChecked 和 Expander.IsExpanded。我想要实现的行为是让 C
我希望这是一个简单的问题,但我没有找到答案。 我想让 build.gradle 文件通过替换某些变量来设置我的 Spring Boot 应用程序中的版本。这与广告一样有效: def tokens =
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
这个问题在这里已经有了答案: In a fragment shader, why can't I use a flat input integer to index a uniform array o
我已经下载了 OSM 世界地图。解析时出现异常: osm bound changeset (...) changeset Exception in thread "main" org.xml.sax.
我是一名优秀的程序员,十分优秀!