PDA

View Full Version : [C] Array di strutture


andrea0032
16-07-2007, 16:37
Ciao. Ho un problema ad allocare un array di strutture in modo dinamico.

typedef struct
{
char nome[MAX];
char cognome[MAX];
}persona;

persona *vett;

Adesso supponete che in nome[] e in cognome[] ci siano due stringhe

strcpy( vett[i].nome , nome );
strcpy( vett[i].cognome , cognome );

Mi da errore di segmentazione quando arriva alle due strcpy quando lo lancio.
Dove sbaglio? Grazie a tutti.

andrea0032
16-07-2007, 16:42
Ah scusate ovviamente ho dimenticato questo.

vett = (persone*)malloc(n*sizeof(persone))

dove n è il numero di elementi nell'array.

L'errore però persiste,

cionci
16-07-2007, 18:28
Non mi sembra che ci siano errori :boh:
Magari il problema è altrove.

andrea0032
16-07-2007, 20:14
Infatti il problema era altrove. Ora però non riesco a fare una cosa.

typedef struct
{
int **matrice;
}elemento;

elemento *vett;

Come faccio a risalire al numero di righe della matrice una volta che l'ho allocata???

uomoserio
16-07-2007, 20:42
Ciao. Ho un problema ad allocare un array di strutture in modo dinamico.

typedef struct
{
char nome[MAX];
char cognome[MAX];
}persona;

persona *vett;

Adesso supponete che in nome[] e in cognome[] ci siano due stringhe

strcpy( vett[i].nome , nome );
strcpy( vett[i].cognome , cognome );

Mi da errore di segmentazione quando arriva alle due strcpy quando lo lancio.
Dove sbaglio? Grazie a tutti.

Scusami, forse dico una vaccata....ma essendo vett un puntatore a struttura, i suoi elementi non andrebbero richiamati con l'operatore "->" ?? :confused:

Cioè:
strcpy( vett[i]->nome , nome );
strcpy( vett[i]->cognome , cognome );

Oppure ho detto una castroneria?

andrea0032
16-07-2007, 21:36
NOn mi interessa tanto ho risolto. Il secondo problema invece vorrei risolvere.

71104
16-07-2007, 22:57
Scusami, forse dico una vaccata....ma essendo vett un puntatore a struttura, i suoi elementi non andrebbero richiamati con l'operatore "->" ?? :confused:

Cioè:
strcpy( vett[i]->nome , nome );
strcpy( vett[i]->cognome , cognome );

Oppure ho detto una castroneria? mi sa di si... :fagiano:
l'array è dichiarato con un solo livello di indirezione dal tipo struct "persona" e siccome le parentesi quadre "redirezionano" di un livello, vett[i] è una struct e non un puntatore. tra l'altro se anche avesse sbagliato in quel senso non ci sarebbe arrivato al segmentation fault perché non sarebbe riuscito a compilare.

71104
16-07-2007, 22:58
Infatti il problema era altrove. Ora però non riesco a fare una cosa.

typedef struct
{
int **matrice;
}elemento;

elemento *vett;

Come faccio a risalire al numero di righe della matrice una volta che l'ho allocata??? se ho capito cosa intendi non si può: devi per forza segnartelo in una variabile durante l'allocazione, magari in un campo della struct.

uomoserio
17-07-2007, 06:45
mi sa di si... :fagiano:
l'array è dichiarato con un solo livello di indirezione dal tipo struct "persona" e siccome le parentesi quadre "redirezionano" di un livello, vett[i] è una struct e non un puntatore. tra l'altro se anche avesse sbagliato in quel senso non ci sarebbe arrivato al segmentation fault perché non sarebbe riuscito a compilare.

Ah, ok, hai ragione. Capito, grazie. :)

cionci
17-07-2007, 07:55
Infatti il problema era altrove. Ora però non riesco a fare una cosa.

typedef struct
{
int **matrice;
}elemento;

elemento *vett;

Come faccio a risalire al numero di righe della matrice una volta che l'ho allocata???
Non puoi...
Modifica la struttura così:
typedef struct
{
int **matrice;
int righe;
int colonne;
}elemento;

andrea0032
17-07-2007, 10:08
Eppure su un sito avevo trovato una formula:

sizeof(array)/sizeof(array[0])

che mi davail numero di elementi di un array. Pensavo che per la matrice ci fosse qualcosa di simile

Ufo13
17-07-2007, 10:15
Eppure su un sito avevo trovato una formula:

sizeof(array)/sizeof(array[0])

che mi davail numero di elementi di un array. Pensavo che per la matrice ci fosse qualcosa di simile


Questa formula dovrebbe funzionare solo per gli array allocati staticamente (nello stack).

cionci
17-07-2007, 10:15
Quella è per la matrice allocata così:

int matrice[10][5];

Ufo13
17-07-2007, 10:28
Si` la mia spiegazione non era KISS abbastanza =P