0

関数呼び出しが完了して関数を終了するときに EXC_BAD_ACCESS を取得するコードのバグに困惑しています。非常に長いコードなので、簡略化します。私はこのようなクラスを持っています:

class BigClass {
public:
    // some class members
    HelperClass object1; // this class describes a particular type of graph
    HelperClass object2;
    BigClass(int n, int m, long double epsilon,
             long double numerical_accuracy_tol, ...); // calls constructor for obj1, 2   
    void GenerateInstance(); // Populates graphs for obj 1 and 2
    // some more stuff
}

GenerateInstance()次のようになります。

void BigClass::GenerateInstance() {
    // generate matrix m1
    object1.PopulateGraph(m1);
    // generate some matrix m2
    object2.PopulateGraph(m2);
}

これを実行すると、EXC_BAD_ACCESS. 段階的にデバッグすると実行されますobject2.PopulateGraph(m2)が、終了するとクラッシュします。PopulateGraph() からすべてのコードを削除してテスト メッセージを出力しただけでも、行列を生成したり object1 を生成するコードの一部を削除したりしても、同じことが起こります。エラーを出さないようにする唯一の方法は、実行する場合です

void BigClass::GenerateInstance() {
    // everything commented out
    object2.PopulateGraph(); // Populate graph empty
}

HelperClassのように見える

class HelperClass {
    public:
    int num_partitions_;
    long double numerical_accuracy_tolerance_;
    vector<SomeOtherObject> subgraphs_;
    HelperClass(int num_partitions, long double numerical_accuracy_tolerance);
}


HelperClass::HelperClass(int num_partitions, long double numerical_accuracy_tolerance) {
    num_partitions_ = num_partitions;
    numerical_accuracy_tolerance_ = numerical_accuracy_tolerance;
}

メンバーはsubgraph_によって移入されPopulateGraph(<vector<vector<long double> > m1)ます。

なぜこれが起こっているのか分かりますか?私は自分でメモリ割り当てを行っていません。また、コードのほとんどをコメントアウトしてもバグが発生するため、そうである可能性はないと思います...フィードバックをお寄せいただきありがとうございます。

4

0 に答える 0