Il programma che ho fatto va in segmentation foult a causa dell'inizializzazione di e->prossimoAppello
che è di tipo string, riuscite a capire come mai?
#include <iostream>
#include "header.h"
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/ipc.h>
using namespace std;
using namespace std;
int main(){
int semId, shmId;
/*Richiesta ed inizializzazione semafori*/
semId = semget(IPC_PRIVATE, 2 , IPC_CREAT | 0664);
cout<<"\nOttenuta chiave per i sem : "<< semId;
semctl(semId, MUTEXL, SETVAL , 1);
semctl(semId, SYNCH, SETVAL , 1);
cout<<"\nMUTEXL = "<<semctl(semId, MUTEXL, GETVAL);
cout<<"\nSYNCH = "<<semctl(semId, SYNCH, GETVAL);
/*Richiesta ed inizializzazione memoria condivisa */
shmId = shmget(IPC_PRIVATE, sizeof(esame), IPC_CREAT | 0664);
cout<<"\nOttenuta chiave per i shm : "<< shmId;
esame * e = (esame *) shmat(shmId,0,0);
e->prossimoAppello = "aaa"; ///////////////////////////////////////QUI///////////////
e->numPrenotati = 0;
e->numLettori = 0;
cout<<endl<<e->prossimoAppello ;
cout<<endl<<e->numPrenotati;
cout<<endl<<e->numLettori;
cout<<endl<<endl;
}
questo è l'header.h
#ifndef HEAD
#define HEAD
#include <string>
using namespace std;
#define MUTEXL 0
#define SYNCH 1
typedef struct{
string prossimoAppello;
int numPrenotati;
int numLettori;
}esame;
void wait(int,int);
void signal(int,int);
void inizioLettura(int, esame *);
void fineLettura(int, esame *);
void inizioScrittura(int);
void fineScrittura(int);
void scrivi(int, esame*);
void leggi(int ,esame*);
#endif