繁体   English   中英

Malloc错误:push_back向量时出现OpenCV / C ++

[英]Malloc Error: OpenCV/C++ while push_back Vector

我尝试使用FAST进行点检测并使用SIFT来构建描述符来创建描述符。 为此,我使用OpenCV。 当我使用OpenCV的FAST时,我只使用了SIFT代码的一部分,因为我只需要描述符。 现在我有一个非常讨厌的malloc错误,我不知道如何解决。 我将代码发布到GitHub,因为它很大,我真的不知道错误的来源。 我只知道,它是在DO-WHILE-Loop的末尾创建的:

    features2d.push_back(features);
    features.clear();
    candidates2d.push_back(candidates);
    candidates.clear();
    }
}while(candidates.size() > 100);

如您在GitHub代码中所见,我已经尝试释放应用程序的内存。 Xcode Analysis说,我的应用程序使用9 Mb内存。 我尝试调试该错误,但是它非常复杂,并且没有找到错误来源的任何线索。

编辑我想知道是否会发生此错误,因为我尝试使用img.at<sift_wt>(...)访问传递给calcOrientationHist(...)的图像像素值,其中,我的代码中第56行和第57行的typdef float sift_wt ,因为通常我通过的补丁输出的类型为0 ,这意味着它是CV_8UC1但是,我是从sift.cpp的330和331行复制了此部分的。通常,SIFT描述符也应该具有灰度图像吗?

EDIT2更改img.at<sift_wt>(...)的类型后,位置img.at<sift_wt>(...) 因此,我用Google搜索解决方案并从XCode登陆了GuardMalloc功能。 启用它会向我显示一个新的错误,这可能是我收到Malloc错误的原因。 我的代码的77 这行给我的错误是EXC_BAD_ACCESS (Code=1, address=....)

for( k = 0; k < len; k ++){
    int bin = cvRound((n/360.f)+Ori[k]);
    if(bin >= n)
        bin -=n;
    if(bin < 0 )
        bin +=n;
    temphist[bin] += W[k]*Mag[k];
}

所提及的变量的值如下: bin = 52, len = 169, n = 36, k = 0,未显示W, Mag, Ori and temphist

这里的GuadMalloc输出(对不起,但我不太了解它到底想要什么)

GuardMalloc[Test-1935]: Allocations will be placed on 16 byte boundaries.
GuardMalloc[Test-1935]:  - Some buffer overruns may not be noticed.
GuardMalloc[Test-1935]:  - Applications using vector instructions (e.g., SSE) should work.
GuardMalloc[Test-1935]: version 108
Test(1935,0x102524000) malloc: protecting edges
Test(1935,0x102524000) malloc: enabling scribbling to detect mods to free blocks 

答案比想象中的要简单。问题是,在For循环中Bin的计算中出现了错误的值。 与其添加ori[k]ori[k]将它与ori[k]相乘。 那里的错误导致bin值为52。但是, temphist指向的Array的长度为38。

对于所有有类似错误的人,我真的建议您使用GuardMalloc或Valgrind调试Malloc错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM