Обнаружено повреждение кучи двухстороннего массива

я получаю ошибку повреждения кучи, когда я запускаю следующий код …

   bool Deque::insertBack(int input)
{
cout << "Back is " << back << endl;
if(isFull() == 0)
{
Array[back] = input;
back = (back - 1) % size;
return true;
}else{
cout << "Deque is Full " << input << " not inserted" << endl;
return false;
}
}

Кажется, я не могу понять это, и я уже давно с этим играюсь, также моя функция insertFront работает нормально.

Это полный класс …

Deque::Deque(int iSize)
{
size = iSize;
Array = new int[size]; // initialise array size
front = 0;
back = 0;
}

Deque::~Deque()
{
delete [] Array;
}

bool Deque::isFull()
{
bool full = false;
cout << back << " " << ((front + 1) % size) << endl;
if(back < (front + 1) % size)
{
// deque is full
full = true;
}
else
{
full = false;
}
return full;
}

bool Deque::insertFront(int input)
{
cout << "Front is " << front << endl;
if(isFull() == 0)
{
Array[front] = input;
front = (front + 1) % size;
return true;
}else{
cout << "Deque is Full " << input << " not inserted" << endl;
return false;
}
}

bool Deque::insertBack(int input)
{
cout << "Back is " << back << endl;
if(isFull() == 0)
{
Array[back] = input;
back = (back - 1) % size;
return true;
}else{
cout << "Deque is Full " << input << " not inserted" << endl;
return false;
}
}

void Deque::displayDeque()
{
for(int i=back;i < front;i++)
{
cout << Array[i] << " is at postion " << i << endl;
}
}

-1

Решение

Это, вероятно, проблема, вызывающая повреждение вашей кучи:

    back = (back - 1) % size;

В C ++ взятие модуля отрицательного числа приводит к отрицательному числу. Таким образом, вы можете получить тот же эффект, используя:

    back = (back + size-1) % size;

Кроме того, ваш displayQueue() функция не учитывает модуль для i,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector