-3

ヒープ クラスを実装しようとしましたが、ベクトルを使用できませんでした。

#include <vector>

template <typename T>
class Heap {

public:
    Heap() {
    current_size = 0;
    }
private:
    int current_size;
    std::vector<T> array;
};

このプログラムを実行しようとするとクラッシュします。"project2.exe が動作を停止しました。"

編集 :

主な機能 :

int main(int argc,char *argv[]) {

    Heap<int> events;
}
4

1 に答える 1

1

"project2.exe has stopped working."あいまいなエラーですが、実行時に確実に発生しています。あなたやあなたのプログラムのユーザーにとって役に立たないので、より良いエラー処理を実装する必要があります。

ベクトルを使用する場合、実行時エラーは通常、不適切な割り当て (std::bad_alloc例外) と存在しないベクトル内の要素へのアクセス(例外) から発生しstd::out_of_rangeます。これらの例外をキャッチして、プログラムがクラッシュしたり、メモリ リークが発生したり、"project2.exe has stopped working."エラー メッセージが表示されたりするのを防ぎます。

メイン関数に try-catch ブロックを配置することで、プログラムからすべての例外をキャッチできます。

int main(int argc, char *argv[])
{
    try
    {
        // put all your code here
        Heap<int> events;
    }
    catch (const std::exception& x)
    {
        // all std exceptions are caught here
        std::cerr << x.what() << '\n';
    }
}

コードに が含まれている場合、例外vector[subscript]はスローされません。std::out_of_rangeパフォーマンスを重視する必要がない場合はvector.at(subscript)、例外がスローされるように置き換えます。

エラー処理によって問題が解決されるわけではありませんが、解決につながる重要なヒントが得られることを忘れないでください。また、デバッガーの使用を検討する必要があります。彼らは、どのコード行がプログラムの動作を停止させているかを教えてくれます。

于 2012-11-11T18:25:15.177 に答える