Тот же код - ошибка "Ошибка сегментации (код сброшен)" в GCC 4.8.3, но он отлично работает в GCC 4.9.2

После кода кучи выдает ошибку "Ошибка сегментации (код сброшен)" в GCC 4.8.3, но он прекрасно работает в GCC 4.9.2. Также, если я добавлю простой cout << ""; в функции heapify (где-то в верхних 4-5 строках) она прекрасно работает и в GCC 4.8.3. Я действительно смущен. Как это может случиться?

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;

int length = 10;

void swap(int a, int b, int* heap)
{
    int tmp = heap[a];
    heap[a] = heap[b];
    heap[b] = tmp;
}

void printHeap(int *heap)
{
    cout << "\n";
    for(int i = 0; i < length; i++)
    {
        cout << heap[i] << " ";
    }
}

void heapify(int *heap, int element)
{
    int leftChild = (2 * element) +1;
    int rightChild = (2 * element) +1+1;
    bool flag = false;
    int swapWith;
        if(leftChild < length && heap[element] > heap[leftChild])
        {
            swapWith = leftChild;
            flag = true;
        }
        if(rightChild < length && heap[swapWith] > heap[rightChild])
        {
            swapWith = rightChild;
            flag = true;
        }
        if(flag)
        {
            swap(element, swapWith, heap);
            heapify(heap, swapWith);
        }
}

void deleteMin(int *heap)
{
    heap[0] = heap[length-1]; //replace last element with the first element[that you want to delete]
    length--;   //reduce the array's length by 1

    heapify(heap, 0);
    printHeap(heap);
}

int main()
{
    int *heap = (int *)malloc(sizeof(int) * length);
    heap[0] = 2;
    heap[1] = 3;
    heap[2] = 6;
    heap[3] = 8;
    heap[4] = 4;
    heap[5] = 7;
    heap[6] = 11;
    heap[7] = 20;
    heap[8] = 15;
    heap[9] = 13;

    heap[0] = 19;
    heapify(heap, 0);
    printHeap(heap);

    deleteMin(heap);
    return 0;
}

Рабочий код здесь без оператора cout в GCC 4.9.2

0 ответов

Другие вопросы по тегам