Ho provato questo per ore, e google tutte le cose che penso gentilmente, ma sto diventando pazzo.Puntatori all'interno del segmento di memoria condivisa
Ho una struct:
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
Non conosco le dimensioni del int * (una matrice) e char * fino a tardi.
Quando lo faccio, creo la memoria condivisa in questo modo:
mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
perror("Ha fallado la creacion de la memoria compartida.");
exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
perror("Ha fallado el acceso a memoria compartida");
exit(2);
}
Nessun problema qui. Poi do un valore a ctrl-> rows e collumns, e assegno 0 a tutta la matrice.
Ma dopo, scrivo qualcosa nel char * e bam, segmentation fault.
Debug del programma Ho visto che entrambi i puntatori, mat e IDs_row dove null. Come posso dare loro i valori corretti all'interno del segmento di memoria condivisa ??
Ho provato a rimuovere il puntatore char *, solo per provarlo, e quindi l'errore di errore di segmentazione era nell'altro programma collegato a detta memoria condivisa e ho controllato i valori all'interno della matrice (controllo -> righe e -> collumns era di successo)
Grazie! Non avevo mai pensato di fare lo shmget per ogni puntatore. (Non capisco nemmeno come funziona, facendo la stessa chiamata ma "lanciandolo") Ora c'è un problema con il secondo intero nella struct, i "collumns". Ho messo un "1" lì in un unico processo, e l'altro processo lo legge come 62045 o qualcosa del genere. Ho provato a cambiare sizeof (ctrl) in sizeof (uomo) e 2 * sizeof (int) + sizeof (int *) + sizeof (char *), ma senza fortuna. – Knudow
Siamo spiacenti, ho inviato il messaggio e poi modificato. Puoi aiutarmi un po 'di più? Ho un problema ora con il secondo numero intero nella struttura. – Knudow
@ user1420534 si prega di inviare una nuova domanda con questo nuovo problema, non sembrano correlati. –