Я изучаю C ++, и у меня возникла проблема, причина которой я не знаю.Я создал класс векторов и матриц, которые являются легкими обертками вокруг массива C и управляют массивом T * в куче.
Класс Matrix имеет функцию:
// in NBDMatrix.hpp class definition
void makeXMeshgridv1(NBDVector<T> v){ // takes a value
for(unsigned int j=0; j<ny; j++){
for(unsigned int i=0; i<nx; i++)
this->at(i,j) = v.at(i);
}
}
void makeXMeshgridv2(NBDVector<T>& v){ // takes a reference
for(unsigned int j=0; j<ny; j++){
for(unsigned int i=0; i<nx; i++)
this->at(i,j) = v.at(i);
}
}
в основном()
NBDVector<float> vec1 = NBDVector<float>(0.0f, 12.6f, 4);
NBDVector<float> vec2 = NBDVector<float>(0.0f, 12.6f, 4);
NBDMatrix<float> mat1(4,8);
NBDMatrix<float> mat2(4,8);
mat1.makeXMeshgridv1(vec1); // causes problem at destruction
mat2.makeXMeshgridv2(vec2); // no problem at destruction
Если я использую makeXMeshgridv1 (), я получаю
malloc: *** error for object 0x100604c50: pointer being freed was not allocated at destruction
, но когда я использую makeXMeshgridv2, все идет хорошо.
Я хотел бы понять, что такоепроблема при использовании makeXMeshgridv1 ().