J'ai défini une classe Signature qui utilise plusieurs structures
personnelles (mais aucune autre classe).
Mon problème, c'est que mon programme plante après 2 ou 3 créations
d'objets. Après avoir créé dynamiquement 2 objets, l'allocation me
génère un coredump (sous Linux), avant même l'appel du constructeur.
Signature *s = new Signature();
// ou encore
Signature *s = (Signature*)malloc(sizeof(Signature));
alors que Signature s; fonctionne sans erreur.
Je croyais qu'une allocation mémoire impossible renvoyait NULL, mais
ne générait pas d'erreur.
Quelqu'un comprend t-il comment le programme peut planter à la
création de l'objet ?
Signature *s = new Signature(); // ou encore Signature *s = (Signature*)malloc(sizeof(Signature));
Attention, ce n'est PAS la même chose. new Signature() va allouer de la mémoire ET appeler le constructeur de signature. malloc ne fait qu'allouer la mémoire, n'appelle PAS le constructeur.
alors que Signature s; fonctionne sans erreur.
Je croyais qu'une allocation mémoire impossible renvoyait NULL, mais ne générait pas d'erreur.
normalement une exception std::bad_alloc est levée.
Quelqu'un comprend t-il comment le programme peut planter à la création de l'objet ?
il faudrait avoir le constructeur, mais vu que ça plante aussi avec malloc, ça doit venir d'ailleurs.
private: couleur couleurs[SIGN_NB_VAL_MAX]; int nb_occ[SIGN_NB_VAL_MAX]; double frequences[SIGN_NB_VAL_MAX]; CvMat *matrice; int nb_couleurs; int nb_pixels; CvMat *mat_signature(void); };
bonjour,
Signature *s = new Signature();
// ou encore
Signature *s = (Signature*)malloc(sizeof(Signature));
Attention, ce n'est PAS la même chose. new Signature() va allouer de la
mémoire ET appeler le constructeur de signature.
malloc ne fait qu'allouer la mémoire, n'appelle PAS le constructeur.
alors que Signature s; fonctionne sans erreur.
Je croyais qu'une allocation mémoire impossible renvoyait NULL, mais
ne générait pas d'erreur.
normalement une exception std::bad_alloc est levée.
Quelqu'un comprend t-il comment le programme peut planter à la
création de l'objet ?
il faudrait avoir le constructeur, mais vu que ça plante aussi avec malloc,
ça doit venir d'ailleurs.
Signature *s = new Signature(); // ou encore Signature *s = (Signature*)malloc(sizeof(Signature));
Attention, ce n'est PAS la même chose. new Signature() va allouer de la mémoire ET appeler le constructeur de signature. malloc ne fait qu'allouer la mémoire, n'appelle PAS le constructeur.
alors que Signature s; fonctionne sans erreur.
Je croyais qu'une allocation mémoire impossible renvoyait NULL, mais ne générait pas d'erreur.
normalement une exception std::bad_alloc est levée.
Quelqu'un comprend t-il comment le programme peut planter à la création de l'objet ?
il faudrait avoir le constructeur, mais vu que ça plante aussi avec malloc, ça doit venir d'ailleurs.