2015-04-20 25 views
5

Celem mojego programu jest odczytanie pliku i wydrukowanie słowa o maksymalnej liczbie występów, a także liczba wyrażeń. Ale mam problemy z malloc i jego składnia. Jest to struktura, która malloc odnosi się do:W jaki sposób używasz obiektu malloc do przydzielania pamięci dla struktury?

struct Word_setup { 
    char word[max_length]; 
    int count; 
}; 

Ta sekcja moim głównym pomógł mi dowiedzieć się, że to był mój błąd:

printf("Pre-Allocation Test"); 

    struct Word_setup *phrase; 

    phrase = (struct Word_setup *) malloc(SIZE); 

    if (phrase == NULL) 
     {printf("Failure allocating memory"); return 0;} 

Wydaje się tylko do wydrukowania, Pre-Allocation Test, a następnie zamarza. Jak już mówiłem, nie jestem pewien, jak rozwiązać ten problem, ale go wyizolowałem.

* Incase zastanawiasz się co SIZE jest:

#define SIZE (sizeof(phrase))


Edit:

Dla tych ciekaw wersji kompilatora/OS/etc .: Windows 7 64bit , GCC 4.9.2

Jeśli chcesz uzyskać więcej informacji Po prostu daj mi znać.

+1

'#define SIZE (sizeof (* fraza))' – BLUEPIXY

+0

[W języku C nie należy rzucać wynik 'malloc'] (http: // stackoverflow .com/questions/605845/do-i-cast-the-result-of-malloc/605858 # 605858) –

+3

Naprawdę warto użyć 'type * ptr = malloc (sizeof (* ptr));' dzięki czemu możesz ' t do tego rodzaju błędu, nawet jeśli zmienisz "typ". – edmz

Odpowiedz

5
phrase = (struct Word_setup *) malloc(SIZE); 

powinny być

phrase = malloc(sizeof(struct Word_setup)); 

Co masz jest

#define SIZE (sizeof(phrase)) 

dadzą Ci rozmiar wskaźnik nie rozmiar struktury. Można też użyć bardziej ogólny sposób przydzielania pamięci

type *p = malloc(sizeof(*p)); 
+2

Drobny problem z stylem: '()' nie jest potrzebny. Mogłoby użyć 'malloc (sizeof * p)' – chux

+0

Jeśli to zrobię, gdy zbuduję program w podniosłej postaci, to powie mi, że wystąpił błąd podczas zamiany pustego wskaźnika na struct – krazibiosvn

+0

"Można również użyć bardziej ogólnej metody przydzielając pamięć "nie można zrobić prawie nic z" void * "i trzeba rzucić to do czegoś, aby nadać mu znaczenie, a więc wracając do [tego] (https://stackoverflow.com/questions/605845/do -i-cast-the-result-of-malloc? rq = 1). – edmz