TDA Vector con Memoria Dinámica

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define CAP 100
#define SIN_MEM 0
#define DUPLICADO 2
#define TODO_OK 1

typedef struct
{
    int * vec;
    int cap;
    int ce;
} lista;

bool crearLista(lista *pl)
{
    pl-> vec = (int*) malloc( 8*sizeof(int));
    if(!pl->vec)   //pl->vec == NULL
        return false;
    pl->ce=0;
    pl->cap = 8;
    return true;
}

int listaInsertarEnOrden( lista *pl, int elem)
{
    int ncap;
    int *nvec;
    if( pl->ce == pl->cap)
    {
        ncap = pl->cap*2;
        nvec = (int*)realloc(pl->vec, ncap*sizeof(int));
        if(!nvec)
            return SIN_MEM;
        pl->vec= nvec;
        pl->cap = ncap;
    }
    int *i = pl->vec;
    int *ult= pl->vec+(pl->ce-1);
    while(i <= ult && elem > *i)
        i++;
    // chequear si hay duplicados
    if(i <= ult && elem == *i)
        return DUPLICADO;
    for( int *j=ult; j>=i; j--)
        *(j+1) = *j;

    *i = elem;
    pl->ce++;
    return TODO_OK;

}


bool listaEliminarOrd(lista*pl, int elem)
{
    if(pl->ce*3 <= pl->cap)  // si un tercio del vector esta cargado
    {
        pl->cap/=2;
        pl->vec = (int*)realloc(pl->vec,pl->cap*sizeof(int)); // esta reduciendo, no necesito guardar en variables temporales porque no va a tirar error xq va a achicar la capacidad.
    }
    int *i = pl->vec;
    int *ult = pl->vec+(pl->ce-1);
    while(i<=ult && elem >*i)
        i++;
    if(i>ult || elem < *i)
        return false;
    for( int *j=i+1; j<=ult; j++)
        *(j-1)=*j;
    pl->ce--;
    return true;
}

void mostrarLista(lista *pl)
{
    int cant = pl->ce;
    while(cant!=0)
    {
        printf("%d\n", *(pl->vec));
        pl->vec++;
        cant--;
    }
}


void destruirLista(lista *pl)
{
    free(pl->vec);
}


int main ()
{
    lista l;
    crearLista(&l);  // como no estamos en poo es obligatorio crearlo
    listaInsertarEnOrden(&l, 2); // no va a insertar al final y luego ordenar. Va insertando en orden. Debo tener la lista ordenada.
    listaInsertarEnOrden(&l, 1); // no va a insertar al final y luego ordenar. Va insertando en orden. Debo tener la lista ordenada.
    listaInsertarEnOrden(&l, 6);
    listaInsertarEnOrden(&l, 9);
    listaInsertarEnOrden(&l, 5);
    mostrarLista(&l);
    return 1;

}