struktur calloc c

stemmer
0

C99 gcc

Jeg får stadig denne feilen. Jeg har en struct utenfor hoved. Og inne viktigste jeg prøver å fordele på stakken hjelp calloc. Jeg kan ikke synes å finne ut hva som er galt.

Takk for alle råd,

error: forventet uttrykk før ')' token

/* global */
struct port_data_t                                                                      
{                                                                                       
    size_t task_id;                                                                     
    pthread_t *thread_id;                                                               
    size_t start_port;                                                                  
    size_t number_ports;                                                                
} *port_data;                                                                           


/* main function */
struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));
Publisert på 09/03/2009 klokken 05:43
kilden bruker
På andre språk...                            


5 svar

stemmer
7

Bør være calloc(4, sizeof(*port_data)): Merk * Saudaf e Var navn.

Svarte 09/03/2009 kl. 05:48
kilden bruker

stemmer
4

bør være sizeof (port_data_t) ikke sizeof (port_data *). Førstnevnte er på størrelse med en port_data_t struct. Sistnevnte betyr ikke noe.

Svarte 09/03/2009 kl. 05:47
kilden bruker

stemmer
1
#include <malloc.h>
#include <pthread.h>

typedef struct port_data_t {
    size_t task_id;
    pthread_t *thread_id;
    size_t start_port;
    size_t number_ports;
} port_data_t;

port_data_t* f() {
    port_data_t* ports = (port_data_t*)calloc(4, sizeof(port_data_t));
    return ports;
}
Svarte 09/03/2009 kl. 05:55
kilden bruker

stemmer
1

Prøv å endre dette:

struct port_data_t *port_data = (struct task_data_t*) calloc(4, sizeof(port_data*));

Til dette:

port_data = (struct port_data_t*) calloc(4, sizeof(*port_data));

Kan fungere litt bedre. Hvis du har erklært port_datasom et globalt struct, trenger du ikke å re-erklære det som en struct port_data_t. GCC skal allerede vet det. Selvfølgelig, hvordan jeg ville gjøre det er dette:

port_data = (struct port_data_t*) calloc(4, sizeof(struct port_data_t));

Men jeg liker ikke å sette variabler i sizeof(). Jeg prøver å holde fast med å sette typer i det, bare av gammel vane. I tillegg løser det noen uklarheter om hvordan akkurat en peker må dereferenced, som tripping deg i dette tilfellet.

Svarte 09/03/2009 kl. 05:51
kilden bruker

stemmer
0

Som påpekt av Jeffamaphone, er task_data_t ut av sammenheng. Og også påpekt av Crashworks, prøv sizeof (port_data_t) hvis du vil ha en rekke strukturer i port_data.

Bruke sizeof (port_data *) vil gjøre det tildele sizeof peker til pekeren over port_data_t som i de fleste tilfeller er bare så nyttig i de fleste tilfellene.

Svarte 09/03/2009 kl. 05:50
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more