juz kiedys pisalem na ten temat, ale nie udalo mi sie uzyskac pomocy wiec pisze jeszcze raz dokladnije precyzujac problem:

mam program, ktory (docelowo) ma wykonywac dzialania na zbiorach (suma, roznica, iloczyn), ponizej fragment
program nawet juz w tym fragmencie sie wysypuje gdy, np. roznica jest zbiorem pustym
czy ktos moglby mi pomoc to poprawic??

#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
#include <conio.h>

typedef struct lista{
int liczba;
lista *adres;
} el;

el *utworz_liste (unsigned int);
el *kopiuj (el *C);
bool czy_nalezy (int x, el *ZBIOR);
el *roznica (el *A, el *B);
void pokaz_liste(el *glowa);

------------ UTWORZ LISTE -------------------------//////
el *utworz_liste(unsigned int zakres)
{
if (zakres)
{
int a=zakres;
cout <<"Tworze liste "<<a<< " elementowa"<<endl;
el *p=NULL, *glowa;

while (zakres--)
{
if(!p)
{
p = new el;
glowa = p;
cout <<"podaj "<< (a-zakres)<<" element"<<endl;
cin >>p->liczba;
}
else
{
p -> adres = new el;
p = p -> adres;
cout <<"podaj "<< (a-zakres)<<" element"<<endl;
cin >>p->liczba;
}
}
p -> adres = NULL;
return (glowa);
}
else return(NULL);
}

-------------------- POKAZ LISTE --------------////////
void pokaz_liste(el glowa)
{
while (glowa)
{
cout << glowa ->liczba << " ";
glowa = glowa ->adres;
}
cout << endl;
}
//////////
/ ------------ KOPIUJ ------------ *///////
el *kopiuj (el *C)
{
if (C)
{
el *p;
el *glowa;
p = new el;
glowa = p; //zapamietanie poczatku
p ->liczba= C ->liczba;

while (C->adres)
{
p ->adres = new el;
C = C->adres;
p = p ->adres;
p ->liczba = C ->liczba;
}
p ->adres = NULL;
return (glowa);
}
else return (NULL);
}

//* ---------- CZY NALEZY DO ZBIORU ------- *//////////
bool czy_nalezy (int x, el *ZBIOR)
{

while (ZBIOR)
{
if (x == ZBIOR ->liczba)
return (true);
ZBIOR = ZBIOR ->adres;
}
return false;
}
//----------- ROZNICA --------------////
el *roznica (el *A, el *B)
{
if (A && B)
{
el *glowa = NULL;
el *p = NULL;
while (A)
{
int x= A->liczba;
if (!czy_nalezy (x, B))
{
if (!p)
{
p = new el;
glowa = p;
p ->liczba = A ->liczba;
}
else
{
p ->adres = new el;
p = p ->adres;
p ->liczba = A ->liczba;
}
}
A= A ->adres;
}
p -> adres = NULL;
return (glowa);
}
else if (A) return (NULL);
else return (kopiuj (A));
}