Tôi nhận được thông báo lỗi này:Xác nhận gỡ lỗi không thành công! Biểu thức: _BLOCK_TYPE_IS_VALID
Xác nhận gỡ lỗi Không thành công!
Biểu hiện: _BLOCK_TYPE_US_VALID (pHead-> nBlockUse)
trong khi cố gắng để làm như sau
#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());
...
}
Các lỗi dường như có liên quan đến chức năng sắp xếp. Tôi kiểm tra tất cả các trường hợp của vector lưới và họ có vẻ là OK, có khác nhau của sse. Điều thú vị là tôi đã tạo ra một trường hợp đơn giản hơn của mã trên (xem bên dưới) và nó hoạt động mà không có bất kỳ lỗi nào. Tôi đang phá hỏng bộ não của tôi. Hãy giúp tôi.
#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);
}
Toàn bộ thông báo lỗi là gì? Nó dường như bị cắt ngắn trong tiêu đề của bài đăng của bạn. – lavinio
Mã của bạn có rất nhiều rò rỉ bộ nhớ. Bạn gọi NN mới và sau đó thêm đối tượng vào vector - đối tượng được sao chép vào vectơ và đối tượng gốc vẫn còn trên heap và bạn không xóa nó. Đó là một rò rỉ bộ nhớ nhưng nó không có khả năng là nguyên nhân của vấn đề. –
sharptooth
Tôi không thấy điều đó trong mẫu mã (trên) của anh ấy; có vẻ như anh ta đang tạo ra các đối tượng trên heap với 'NN * net = new NN (...' và sau đó chỉ cần đặt một bản sao của con trỏ đó vào trong vectơ. – lavinio