1

I try to create a Descriptor using FAST for the Point detection and SIFT for building the Descriptor. For that purpose I use OpenCV. While I use OpenCV's FAST I just use parts of the SIFT code, because I only need the Descriptor. Now I have a really nasty malloc Error and I don't know, how to solve it. I posted my code into GitHub because it is big and I dont really know where the Error comes from. I just know, that it is created at the end of the DO-WHILE-Loop:

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

As you can see in the code of GitHub I already tried to release Memory of the Application. Xcode Analysis says, that my Application uses 9 Mb memory. I tried to debug the Error but It was very complicated and I haven't found any clue where the Error comes from.

EDIT I wondered if this Error could occur because I try to access the Image Pixel Value passed to calcOrientationHist(...) with img.at<sift_wt>(...) where typdef float sift_wt at Line 56, and 57 in my code, because normally the Patch I pass outputs the type 0 which means it is a CV_8UC1 But well, I copied this part from the sift.cpp at Line 330 and 331 Normally the SIFT Descriptor should also have a Grayscale image or not?

EDIT2 After changing the type in the img.at<sift_wt>(...)Position nothing changed. So I googled Solutions and landed at the GuardMalloc feature from XCode. Enabling it showed me a new Error which is probably the Reason I get the Malloc Error. In line 77 of my Code. The Error it gives me at this line is EXC_BAD_ACCESS (Code=1, address=....) There are the following lines:

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];
}

The Values of the mentioned Variables are the following: bin = 52, len = 169, n = 36, k = 0, W, Mag, Ori and temphist are not shown.

Here the GuadMalloc Output (sorry but I dont really understand what exactly it wants)

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 

1 Answer 1

1

Answer is simpler as thought... The Problem was, that in the calculation of Bin in the For-loop the wrong value came out. Instead of adding ori[k] it should be a multiplication with ori[k]. The mistake there resulted in a bin value of 52. But the Length of the Array that temphist is pointing to is 38.

For all who have similar Errors I really recomment to use GuardMalloc or Valgrind to debug Malloc Errors.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.