Je reçois ce message d'erreur:Échec de l'assommage de débogage! Expression: _BLOCK_TYPE_IS_VALID
Debug Assertion a échoué!
Expression: _BLOCK_TYPE_US_VALID (pHead-> nBlockUse)
tout en essayant de faire ce qui suit
#include <vector>
#include <algorithm>
using namespace std;
class NN
{
public:
NN(const int numLayers,const int *lSz,const int AFT,const int OAF,const double initWtMag,const int UEW,const double *extInitWt);
double sse;
bool operator < (const NN &net) const {return sse < net.sse;}
};
class Pop
{
int popSize;
double a;
public:
Pop(const int numLayers,const int *lSz,const int AFT,const int OAF,const double initWtMag,const int numNets,const double alpha);
~Pop();
vector<NN> nets;
void GA(...);
};
Pop::Pop(const int numLayers,const int *lSz,const int AFT,const int OAF,
const double initWtMag,const int numNets,const double alpha)
{
popSize=numNets;
a=alpha;
nets.reserve(popSize);
for(int i=0;i<popSize;i++)
{
NN *net = new NN (numLayers,lSz,AFT,OAF,initWtMag,0,0);
nets.push_back(*net);
}
}
void Pop::GA()
{
...
sort(nets.begin(),nets.end());
...
}
L'erreur semble être lié à la fonction de tri. Je vérifie toutes les instances de vecteur de filets et ils semblent être OK, ayant des sse différents. La chose amusante est que j'ai créé un cas plus simple du code ci-dessus (voir ci-dessous) et cela a fonctionné sans aucune erreur. Je détruis mon cerveau. S'il vous plaît aider.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class Student
{
public:
string name;
double grade;
Student(string,double);
bool operator < (const Student &st) const {return grade < st.grade;}
};
Student::Student(string stName,double stGrade)
{
name = stName;
grade = stGrade;
}
int main()
{
vector<Student> group;
Student *st;
st = new Student("Bill",3.5);
group.push_back(*st);
st = new Student("John",3.9);
group.push_back(*st);
st = new Student("Dave",3.1);
group.push_back(*st);
sort(group.begin(),group.end());
for each(Student st in group)
cout << st.name << " " << st.grade << endl;
cin.get();
return(0);
}
Quel est le message d'erreur complet? Il semble être tronqué dans le titre de votre publication. – lavinio
Votre code a une tonne de fuites de mémoire. Vous appelez le nouveau NN, puis ajoutez l'objet au vecteur - l'objet est copié dans le vecteur et l'objet d'origine reste sur le tas et vous ne le supprimez pas. C'est une fuite de mémoire, mais ce n'est pas susceptible d'être la cause du problème. –
sharptooth
Je ne le vois pas dans son exemple de code (supérieur); on dirait qu'il crée les objets sur le tas avec NN * net = new NN (... 'et ensuite il place simplement une copie de ce pointeur dans le vecteur – lavinio