Ich erhalte diese Fehlermeldung:Debug-Assertion fehlgeschlagen! Expression: _BLOCK_TYPE_IS_VALID
Debug Assertion Failed!
Expression: _BLOCK_TYPE_US_VALID (pHead-> nBlockUse)
beim Versuch, die folgenden
#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());
...
}
der Fehler zu tun, scheint mit der Sortierfunktion zusammenzuzuhängen. Ich überprüfe alle Instanzen von Vektornetzen und sie scheinen in Ordnung zu sein, mit verschiedenen SSEs. Das Lustige ist, dass ich einen einfacheren Fall des obigen Codes erstellt habe (siehe unten) und es hat ohne Fehler funktioniert. Ich ruiniere mein Gehirn. Bitte helfen Sie.
#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);
}
Was ist die ganze Fehlermeldung? Es scheint im Titel Ihres Beitrags abgeschnitten zu sein. – lavinio
Ihr Code weist eine Menge Speicherlecks auf. Sie rufen eine neue NN auf und fügen das Objekt dann zum Vektor hinzu - das Objekt wird in den Vektor kopiert und das ursprüngliche Objekt verbleibt auf dem Heap und Sie löschen es nicht. Es ist ein Speicherleck, aber es ist wahrscheinlich nicht die Ursache des Problems. –
sharptooth
Ich sehe das nicht in seinem (oberen) Codebeispiel; es sieht aus wie er mit 'NN * net = new NN (...' die Objekte auf dem Heap schafft und dann nur eine Kopie dieses Zeigers in den Vektor platzieren – lavinio