0

実行時にメモリ障害メッセージが表示されます。STLを初めて使用するため、関数でキューを削除するなどの特別な方法でキューを処理する必要があるかどうかわかりません。

この関数にエラーをトレースしました

template <typename T>  
bool contains(std::queue<T> set, T val){
        std::queue<T> hold;
        bool isContained = false;

        if (set.front() == val) isContained = true;
        while(!set.empty()){
                hold.push(set.front());
                set.pop();
                if (set.front() == val) isContained = true;
        }

        while(!hold.empty()){
                set.push(hold.front()); 
                hold.pop();
        }

        return isContained;
}

私のmain()では、この関数をキューに対して20回正常に呼び出し、次にキューで関数が最初に呼び出されたときに、プログラムは関数内の2つのループの間に「メモリ障害」メッセージを吐き出します。

私はgnuコンパイラを使用しています。

4

1 に答える 1

2

への 2 回目の呼び出しset.front()では、セットが空でないという保証はありません。

于 2013-03-15T05:41:02.027 に答える