otrzymuję komunikat o błędzie:Asercja debugowania nie powiodła się! Wyrażenie: _BLOCK_TYPE_IS_VALID
Debug Assertion failed!
Expression: _BLOCK_TYPE_US_VALID (pHead-> nBlockUse)
starając się zrobić następujące
#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());
...
}
Błąd wydaje się być związane z funkcją sortowania. Sprawdzam wszystkie przypadki sieci wektorów i wydają się być w porządku, mając różne sse. Zabawne jest to, że stworzyłem prostszy przypadek powyższego kodu (patrz poniżej) i zadziałało bez błędów. Zniszczę mój mózg. Proszę pomóż.
#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);
}
Co to jest cały komunikat o błędzie? Wygląda na okrojony w tytule Twojego posta. – lavinio
Twój kod zawiera mnóstwo wycieków pamięci. Wywołujesz nowe NN, a następnie dodajesz obiekt do wektora - obiekt zostanie skopiowany do wektora, a oryginalny obiekt pozostanie na stercie i nie zostanie usunięty. Jest to wyciek pamięci, ale najprawdopodobniej nie jest przyczyną problemu. –
sharptooth
Nie widzę tego w jego (górnym) przykładzie kodu; wygląda na to, że tworzy obiekty na stercie za pomocą 'NN * net = new NN (...' a następnie po prostu umieszczenie kopii tego wskaźnika w wektorze – lavinio