In cvsurf.cpp, cvExtractSURF function, route for descriptors:
if( _descriptors )
{
descriptors = cvCreateSeq( 0, sizeof(CvSeq),
descriptor_size*CV_ELEM_SIZE(descriptor_data_type), storage );
cvSeqPushMulti( descriptors, 0, N );
}
Please note function: cvSeqPushMulti( descriptors, 0, N )
The first line of cvSeqPushMulti function is:
cvSeqPushMulti( CvSeq *seq, const void *_elements, int count, int front )
{
char *elements = (char *) _elements;
........
}
It seems that, cvSeqPushMulti( descriptors, 0, N ) passing in a ZERO _elements parameter,
then,
char *elements = (char *) _elements;
got an illegal pointer(debug and see it was: ????)
After that, all operation for descriptors will be failed.