Algorytm Petersona – problem z dowiązaniem pamieci, naruszenie ochrony pamieci

0

Funkcje z biblioteki statycznej dołączanej do programu

int shmCreate(int id,int size)
{
        key_t klucz;
	klucz=ftok(".",id);
        int shmid;
	shmid=shmget(klucz,size,IPC_CREAT|0666);
        if(shmid==-1)
	 {
	   perror("Blad przy shmCreat\n");
	   exit(1);
	 }
          else
	    printf("Utworzono pamiec o identyfikatorze  %d i rozmiarze %d\n",shmid);
return shmid;
}

void* shmAt(int shmid){
	char *buf;
	buf=shmat(shmid,NULL,0);
	if(*buf==-1){
	perror("Blad funkcji shmAt");
	exit(4);
	}
	return buf;
}

Poczatek Algorytmu petersona , część w której tworzymy zmienne dzielone .

int main ()
{
srand(time(0));
/* Zmienne dzielone */
int* kolej; // Czyja kolej do wejscia do sekcji krytycznje
int* flaga[2]; // Chęć wejscia do sekcji krytycznej 

/* Inicjujemy zmienne współdzielone */
int shmid;
shmid = shmCreate( 11 , 64 );
kolej = (int*)shmAt(shmid); // kolej
*kolej = 0 ; // Proces który będzie wchodził do sekcji krytycznje to proces 0 
printf("Kolej");
 
	///////////////
shmid = shmCreate(12 , 64 );
flaga[0] = shmAt(shmid);
*flaga[0] = 0 ; // Brak checi wejscia 

	/////////////
shmid = shmCreate(13 , 64 );
flaga[1] = shmAt(shmid);
*flaga[1] = 0; // Brak checi wejscia 

Podczas kompilacji jest zwracana kilka warningow(cast to pointer from integer off difrent size )
Gdy uruchamiam program, dochodzi do naruszenia ochrony pamięci.
Zgaduję, że jest coś nie tak z linijką: kolej = (int*)shmAt(shmid); // kolej
Co powinienem poprawić ?

0
    if(*buf==-1){
    perror("Blad funkcji shmAt");
    exit(4);
    }

to na pewno poprawne?

Swoją drogą: słyszałeś kiedyś o czymś takim jak formatowanie kodu? Tragicznie się to czyta.

1 użytkowników online, w tym zalogowanych: 0, gości: 1