1. ホーム
  2. c++

[解決済み] "std::bad_alloc": 私はメモリを使いすぎているのでしょうか?

2022-03-04 05:39:06

質問

メッセージは?

terminate called after throwing an instance of 'std::bad_alloc'
what():  std::bad_alloc

gdbのバックトレースを見てみると、この中に自分で実装した最下層のメソッドがありました。

/*
 * get an array of vec3s, which will be used for rendering the image
 */
vec3 *MarchingCubes::getVertexNormalArray(){
    // Used the same array size technique as getVertexArray: we want indices to match     up
    vec3 *array = new vec3[this->meshPoints.getNumFaces() * 3]; //3 vertices per face

    int j=0;
    for (unsigned int i=0; i < (this->meshPoints.getNumFaces() * 3); i++) {
        realVec normal = this->meshPoints.getNormalForVertex(i);
 //     PCReal* iter = normal.begin();

        if (normal.size() >= 3) {
            array[j++] = vec3(normal[0], normal[1], normal[2]);
        }
        cout << i << " ";
    }

    return array;
}

上に見えるcout文は、7000回以上繰り返した後に終了していることを示しています。 上記の関数は、私のアプリケーションの終了間際に一度だけ呼び出されます。上記の関数を呼び出す前に、非常によく似た関数を呼び出していますが、これは問題を起こしません。

解決方法は?

私の問題は、次のようなものであることが判明しました。 this->meshPoints.getNormalForVertex(i) よりも小さい長さの配列 (あるいはベクトル、覚えていません) にアクセスします。 this->meshPoints.getNumFaces() * 3 . つまり、圏外にアクセスしていたわけです。