Почему я получаю прерывание (сброс ядра)

#c #free

#c #Бесплатно

Вопрос:

У меня есть этот фрагмент кода, но я получаю прерывание (сброс ядра). Когда я комментирую строку уничтожения, все в порядке, поэтому я полагаю, что ошибка есть. Есть идеи?

 #include <stdio.h>
#include <stdlib.h>
#define maxelem 100
#define NIL -1

typedef int BHItem;

struct node {
        BHItem data;
        int priority;
};

typedef struct node *BHNode;

BHNode BHCreate()               //This function creates an empty heap
{
        BHNode heap;
        int i;
        heap=malloc(maxelem*sizeof(struct node));
        for (i=0; i<maxelem; i  ) {
                heap[i].data=NIL;
                heap[i].priority=NIL;
        }
}

void BHDestroy(BHNode heap)             //This function destroys a heap
{
        free(heap);
}

int main()
{
        BHNode heap;
        heap=BHCreate();
        BHDestroy(heap);        //Destroy the heap
        return 0;
}
  

Комментарии:

1. вам нужно return heap из BHCrreate() функции.

Ответ №1:

Проблема в том, что BHCreate отсутствует a return heap; в качестве окончательного утверждения. Это должно выглядеть так:

 BHNode BHCreate()
{
        BHNode heap;
        int i;
        heap=malloc(maxelem*sizeof(struct node));
        for (i=0; i<maxelem; i  ) {
                heap[i].data=NIL;
                heap[i].priority=NIL;
        }

        return heap;
}
  

Вы должны включить предупреждения компилятора, чтобы обнаружить такие вещи:

 $ gcc main.c -Wall -Wextra
main.c: In function ‘BHCreate’:
main.c:26:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^