Bonjour,

Je fais actuellement quelque tutoriel sur openCV en utilisant visual studio 2012 et je rencontre un problème que je n'arrive pas à résoudre.

quand mon programme arrive a la dernière ligne du main (sur le return final donc) il "plante" avec un "has triggered a breakpoint" en ouvrant le fichier "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\dbgheap.c" a cette endroit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
        const void * pUserData
        )
{
        if (!pUserData)
            return FALSE;
 
        if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
            return FALSE;
 
        return HeapValidate( _crtheap, 0, pHdr(pUserData) );
}
et avec cette erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
HEAP[Tracker10.exe]: Invalid address specified to RtlValidateHeap( 00740000, 031884D0 )
Voici mon code que j'ai réduis au maximum.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\nonfree\features2d.hpp>
 
#pragma comment(lib, "opencv_highgui247d.lib") 
#pragma comment(lib, "opencv_core247d.lib") 
#pragma comment(lib, "opencv_features2d247d.lib") 
#pragma comment(lib, "opencv_nonfree247d.lib") 
 
int main() {
	cv::Mat object = cv::imread("C:/Users/weanz/Downloads/Tracker10/Debug/label1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
 
	if(object.empty())
		exit(0);
 
	std::vector<cv::KeyPoint> keypointsO;
 
	cv::SurfFeatureDetector surf(1000);
	surf.detect(object,keypointsO);
 
        std::cout <<"size = "<<keypointsO.size();
	std::cout <<"Avant crash";
	system("pause"); // ne crash pas
	return 1; // crash
}
Le seul moyen pour faire fonctionner le programme est de spécifier la taille du vector a la ligne 16 qui doit être égal à la valeur obtenu a la ligne 21
On obtient alors ceci : "std::vector<cv::KeyPoint> keypointsO(964);".

Hélas la taille varie en fonction des dimensions de l'image et de la valeur d'initialisation de surf. Comment faire pour calculer cette taille a l'avance ou pour utiliser un autre moyen d'initialisation qui ne me force pas a connaitre la taille du vector dès le début?