OpenCV free():无效指针:
OpenCV free(): invalid pointer:
我在运行一个应用程序时遇到了下一个错误,该应用程序从文件中读取一些数据,提取图像的特征,并使用一组预先训练的分类器预测结果:
> *** glibc detected *** ./SVMread: free(): invalid pointer: 0xbfeb2670 ***
> ======= Backtrace: ========= /lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb5fe8ee2]
> /usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0xb61e451f]
> ./SVMread(_ZN2cv17FlannBasedMatcherD0Ev+0x1c)[0x804b214]
> ./SVMread[0x804ca96] ./SVMread[0x804c0e1]
> ./SVMread(_ZN2cv3PtrINS_17DescriptorMatcherEED1Ev+0x11)[0x804b6e9]
> ./SVMread[0x804a8cc]
> /lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb5f8c4d3]
> ./SVMread[0x8049ef1]
> ======= Memory map: ======== 08048000-08050000 r-xp 00000000 00:14 101213 /home/srt/OpenCV-2.4.2/samples/cpp/SVMread
> 08050000-08051000 r--p 00007000 00:14 101213
> /home/srt/OpenCV-2.4.2/samples/cpp/SVMread 08051000-08052000 rw-p
> 00008000 00:14 101213 /home/srt/OpenCV-2.4.2/samples/cpp/SVMread
> ...
我认为冲突的部分在代码的下一部分中,但我在网上和OpenCV文档中都找不到解决方案。
SurfDescriptorExtractor extractor1;
Ptr<DescriptorExtractor> extractor = &extractor1;
FlannBasedMatcher matcher1;
Ptr<DescriptorMatcher> matcher = &matcher1;
BOWImgDescriptorExtractor bowide(extractor,matcher);
或在:
CvFileStorage* storage = cvOpenFileStorage( "svm1.yml", 0, CV_STORAGE_READ );
const char * c;
string clase;
CvFileNode* cFN;
for (unsigned int i = 0; i<Vclases.size(); i++) {
clase = Vclases[i];
c = (clase).c_str();
cFN = cvGetFileNodeByName( storage , 0, c );
cout << "reading " << clase << endl;
classes_classifiers[clase].read(storage, cFN );
}
编辑:valgrind输出确认中存在问题
CvFileStorage* storage = cvOpenFileStorage( "svm1.yml", 0, CV_STORAGE_READ );
Valgrind:
> Conditional jump or move depends on uninitialised value(s)
> ==23398== at 0x56585C0: ____strtod_l_internal (strtod_l.c:1659)
> ==23398== by 0x5653FAE: strtod (strtod.c:70)
> ==23398== by 0x41425B1: icv_strtod(CvFileStorage*, char*, char**) (in /usr/local/lib/libopencv_core.so.2.4.2)
> ==23398== by 0x415875F: icvYMLParseValue(CvFileStorage*, char*, CvFileNode*, int, int) (in /usr/local/lib/libopencv_core.so.2.4.2)
> ==23398== by 0x804A377: main (SVMread.cpp:64)
> ==23398== Uninitialised value was created by a stack allocation
> ==23398== at 0x56575E4: ____strtod_l_internal (strtod_l.c:424)
我是一个有指针和内存分配的新手,所以任何帮助都将不胜感激。提前谢谢。
我找到了解决方案:问题是cv:Ptr处理日常分配的对象,这就是为什么在试图释放通过引用初始化的指针时出错的原因。因此,指针的正确声明是:
Ptr<DescriptorMatcher > matcher = new FlannBasedMatcher;
Ptr<DescriptorExtractor > extractor(new SurfDescriptorExtractor());
分割错误消失了。
(注意:由于这里给出的答案,我找到了解决方案:OpenCV/C++-如何释放指针
相关文章:
- 如何实现容纳整数和无效指针的双向链表?
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- 应用地址清理器后,免费无效指针消失
- C++ 在具有数组成员的类上无效指针/双精度释放
- 不断得到分段错误和free()无效指针
- 使用无效指针初始化指针声明符的行为是否未定义?
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- 无效指针、隔离标识符等
- c++ 无效指针从空闲列表中取消排队
- C++ munmap_chunk(): 无效指针:
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 无效指针和非初始化的指针之间的差异
- 如何用无效指针初始化unique_ptr的向量
- 地址清理器在静态强制转换无效指针时报告错误
- MS4:Free(Free()无效指针0xB74E74E0 ***
- ***检测到的GLIBC *** MS2:free():无效指针:0xB7526FF4 ***
- 无效指针功能的输出
- 有人能告诉我这是如何在main()中实现的吗?(关于无效指针的问题)
- C++11使用智能指针,但得到无效指针
- 无效指针的相关性