Delete si usa per deallocare memoria allocata con new (in c++); te per deallocare devi usare free(); prova questa versione di elimina_ostacolo:

codice:
OSTACOLO *elimina_ostacolo(OSTACOLO *primo, int a, int b){
	if(primo == NULL)
		return NULL;
	if(primo->x0 <= a && a <= primo->x1){
		if(primo->y0 <= b && b <= primo->y1){
			OSTACOLO temp = primo -> suc;
			free(primo);	
			return elimina_ostacolo(temp, a, b);
		}
	}
	primo -> suc = elimina_ostacolo(primo -> suc, a, b);
	return primo;
}

Non l'ho provata comunque.