Błąd przy zwalnianiu pamięci dla stuktury

0

Witam
Piszę funkcję, która operuje na dwu strukturach zdefiniowanych jak poniżej:

typedef struct mini_win_t
{
    char    *letters;
    unsigned code;
} MiniWin;

typedef struct ticket_t
{
    MiniWin *mini_wins;
    unsigned count;
} Ticket;

oryginalna treść zadania poniżej:
Time to win the lottery!

Given a lottery ticket (ticket), represented by an array of 2-value arrays, you must find out if you've won the jackpot.

Example ticket:

{ { "ABC", 65 }, { "HGR", 74 }, { "BYHT", 74 } }
To do this, you must first count the 'mini-wins' on your ticket. Each subarray has both a string and a number within it. If the character code of any of the characters in the string matches the number, you get a mini win. Note you can only have one mini win per sub array.

Once you have counted all of your mini wins, compare that number to the other input provided (win). If your total is more than or equal to (win), return 'Winner!'. Else return 'Loser!'.

All inputs will be in the correct format. Strings on tickets are not always the same length.

kod źródłowy:

typedef struct mini_win_t
{
    char    *letters;
    unsigned code;
} MiniWin;

typedef struct ticket_t
{
    MiniWin *mini_wins;
    unsigned count;
} Ticket;

const char *bingo(const Ticket *ticket, unsigned win)
{
	unsigned result = 0;
	for (unsigned i = 0; i < ticket->count; i++)
	{
		while (*ticket->mini_wins[i].letters!='\0')
		{
			if (*ticket->mini_wins[i].letters == ticket->mini_wins[i].code)
			{
				result++;
				break;
			}
			ticket->mini_wins[i].letters++;
		}
	}
  printf("%d",result);
	return result >= win ? "Winner!" : "Loser!";
}

Serwer wyrzuca mi błąd przy zwalnianiu pamięci. Kod zwalniający pamięć:

    for (unsigned i = 0; i < ticket.count; i++)
        free(ticket.mini_wins[i].letters);
    free(ticket.mini_wins);

Mógłbym prosić o wytłumaczenie dlaczego pojawia się błąd przy zwalnianiu pamięci i jak go naprawić.

0

Jak to jest zadanie typu SPOJ/leetcode to być może liczy się wynik i nie potrzebujesz w ogóle zwalniać pamięci.

0
Czitels napisał(a):

Jak to jest zadanie typu SPOJ/leetcode to być może liczy się wynik i nie potrzebujesz w ogóle zwalniać pamięci.

Pamięć jest zwalniana po stronie serwera. Kompilowałem ten program w VisualStudio i zauważyłem że daje prawidłowy wynik, ale serwer wyrzuca błąd przy zwalnianiu pamięci

0

Problem rozwiązany. Przesuwanie wskaźnika w instrukcji

ticket->mini_wins[i].letters++

Wystarczy zapamiętać adres i przypisać go do ticket->mini_wins[i].letters

1 użytkowników online, w tym zalogowanych: 0, gości: 1