Witam,

napisałem funkcję która służy do wyboru gracza w moim programie, powinna ona zwracać wskaźnik na strukturę z danymi gracza. Jednak mam pewien problem, funkcja New_Player zwraca listę z wskaźnikiem na strukturę nowego gracza i wszystko niby jest dobrze ale gdy program dojdzie do momentu, że powinien wyświetlić nazwę gracza aby móc go wybrać, string z nazwą gracza zamienia się na jakieś śmiecie, a gdy klikniemy w jakąś linijkę z pustym miejscem, co powoduje, że cała pętla przelatuje jeszcze raz cała struktura z nowym graczem zostaje wyczyszczona.

Używam biblioteki Allegro.

 
Player *Player_List(BITMAP *plist)
{
    int i,k,j,loop,n,l,y;
    Player *list = NULL,*tmp,*tmp2 = NULL;
    list = Make_List(list);
    loop = k = j = n = l = 0;
    tmp = list;
    while(loop != END)
    {
        j = 0;
        blit(plist,screen,0,0,0,0,SIZE_X,SIZE_Y);
        if(n != 0)
            list = Go_To_Player(list,n);
        y = 210;
        tmp = list;
        for(i=0;i<10;i++)
        {
            if(list != NULL)
            {
                textprintf(screen,font,20,y,GREEN,"%d. %s.",i+1,(*list).name);
                list = (*list).next;
            }
            else
                textprintf(screen,font,20,y,GREEN,"%d. ------------.",i+1);
            y = y + 30;
        }
        if(k == 10 && (*list).next != NULL)
        {
            textprintf(screen,font,20,y,GREEN,"Nastepne");
            k = 1;
        }
        if(n > 0)
        {
            textprintf(screen,font,20,y,GREEN,"Poprzednie");
            if(k == 1)
                k = 3;
            else
                k= 2;
        }
        list = tmp;
        i = 0;
        while(j == 0)
        {
            if(mouse_b == 0 && i != 1)
                    i = 1;
            if(mouse_b == Left_Click && i == 1)
            {
                i = 0;
                j++;
                l = Check_Menu6(mouse_x,mouse_y,k);
 
                if(l > 0 && l < 10)
                {
                    tmp  = Go_To_Player(list,l-1);
                    if(tmp != NULL)
                        loop = END;
                }
                else
                {
                    switch(l)
                    {
                    case 11:
                        list = New_Player(list);                    
                    break;
                    case 12:
                        n = n + 10;
                    break;
                    case 13:
                        n = n + 10;
                    break;
                    default:
                        j = 0;
                    break;
                    }
                }
            }
        }
    }
    Save_Player(list);
    Delete_Player(list);
    return tmp;
}

edit:

Dodam jeszcze, że dzieje się to podczas wykonywania się funkcji blit a gdy usunę tę funkcje to dzieje się podczas textprintf.