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.