私はキューを扱うラボに取り組んでいますが、これは完全に関連しているとは思いません。私の仕事は「優先キュー」を作成することであり、それを行うために私が考えることができる最良の方法は次のとおりです
void IntQueue::enqueue(int num,int priorityOfEntry)
{
if (isFull())
cout << "The queue is full.\n";
else
{
// Calculate the new rear position
//insert correct lab code here haha
if (priorityOfEntry == 1)
{
rear = (rear + 1) % queueSize;
queueArray[rear] = num;
queueSize++;
}
else if (priorityOfEntry == 2)
{
queueSize++;
int* newArray = new int[queueSize];
newArray[0] = num;
for(int counter = 0;counter< queueSize; counter++)
{
newArray[counter+1] = queueArray[counter];
}
queueArray = newArray;
delete [] newArray;
}
else cout << "invalid priority" << endl;
// Insert new item
// Update item count
numItems++;
}
}
メインプログラムで説明する優先度は 1 と 2 の 2 つだけです。すべての優先度が同じ場合はもちろん問題なく動作しますが、優先度を上げるとデストラクタでエラーがスローされます。
これがこのラボに取り組む正しい方法だとは本当に思いませんが、うまくいくようです..少なくとも、実際にこのメモリエラーを修正できれば. 唯一の問題は、デストラクタが削除すると考えているアドレスを変更することだと思います..しかし、ポインタはすでにそれを説明していると思いました。自分のプログラムをデバッグすることを学ぶ必要があることを理解しています。本当です。しかし、コードをじっと見つめているだけで、そこにはレンガの壁しかないことがあります。それが正しい方向への微調整の目的だと思います。