カスタム比較クラスとカスタムクラスをキーとして使用するstd::mapを使用します
ここで、operator[]を使用してキーで要素にアクセスします。しかし、これは大きな問題を引き起こすようです。マップが要素を誤って割り当てているように見えるか、要素が破損しています。これは、比較するオブジェクトの1つがデータフィールドに任意の値を格納していることを検出すると、カスタム比較クラスが例外をスローするためです(これは、コンストラクターが実行されなかったか、オブジェクトが作成されなかったことを意味しているようです。最初の場所)
ここで、別の不一致が現れます。
std :: map :: size()を呼び出して、begin()イテレータをインクリメントしてend()イテレータに到達できる回数と比較すると、一致しません。
具体的には、マップは明らかに含まれているよりも大きいsize()を報告します。
キーとして使用するクラスは、データフィールドを持つカスタムマトリックスクラスです。
unsigned int
unsigned int
vector<vector<Another Class>>
ただし、これらのクラスのいずれでも、ポインタ演算など、メモリを直接操作できるものは使用していません。また、使用されているクラスのいずれにもカスタム定義のコピーコンストラクターはありません。
編集:比較機能
struct SymModMatComp
{
bool operator()(const ModMat& mat1, const ModMat& mat2) const
{
unsigned int rows = mat1.get_row_number();
unsigned int columns = mat1.get_column_number();
if(mat2.get_row_number() != rows || mat2.get_column_number() != columns)
{
throw dimension_mismatch();
}
for(unsigned int i = 0; i < rows; i++)
{
for(unsigned int j = 0; j < columns; j++)
{
if(mat1.get_item(i,j).get_value() < mat2.get_item(i,j).get_value())
{
return true;
}
else if(mat1.get_item(i,j).get_value() > mat2.get_item(i,j).get_value())
{
return false;
}
}
}
return false;
}
}
get_value()はunsignedintを返します
解決済み:
valgrindを使用して、メモリアクセスエラーをチェックしました...プログラムactuallzのまったく関係のない部分が、すでに削除されたオブジェクトを何度も削除したことがわかりました...。
これにより、マップにアイテムが保存されているスペースが破損したようです。
しかし、すべての良いアイデアをありがとう!