I'm creating a priority list in C (topological ordering) using vectors and within those vectors a linked list pointing out who has to come before whom. But it's giving the pointer error and I really can not figure it out.
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#define DIM 50
typedef struct list{
struct list * prox;
int contador;
}LISTA;
typedef struct ant{
struct ant* prox;
int chave;
}PRE;
void iniciar(int n, int m, LISTA lista[DIM], PRE *ptpre);
int main(void){
LISTA lista[DIM],pt;
PRE ptpre;
int m,n,fim,objeto,indice,i;
scanf("%d %d",&n,&m);
iniciar(n,m,lista,&ptpre);
fim = 0;
lista[0].contador=0;
for (i=1;i<=n;i++){
if(lista[i].contador==0){
lista[fim].contador = i;
fim = i;
}
}
objeto=lista[0].contador;
while(objeto != 0){
printf("%d",objeto);
pt = lista[objeto].prox;
while (*pt != 0){
indice = pt->chave;
lista[indice].contador = lista[indice].contador -1;
if (lista[indice].contador == 0){
lista[fim].contador = indice;
fim = indice;
}
pt = pt->prox;
}
objeto=lista[objeto].contador;
}
return 0;
}
void iniciar(int n, int m, LISTA lista[DIM], PRE *ptpre){
int i;
for (i=0;i<=n;i++){
lista[i].contador = 0;
lista[i].prox = 0;
}
for (i=1;1<=m;i++){
scanf("%d %d",&a,&b);
ptpre = (PRE *) malloc(sizeof(PRE));
ptpre -> chave = b;
ptpre -> prox = lista[a].prox;
lista[a].prox = ptpre;
lista[b].contador = lista[b].contador + 1;
}
}