SharedMemory Speicherzugriffsfehler
-
Servus
Immer wenn ich versuche was aus meinem SM zu lesen bekomme ich nen Speicherzugriffsfehler.
Main
auktionsStruct * auction; auction=initSM(); auction->startGebot=100; auction->aktuellesGebot=0; auction->hgClient=0; printf("%d\n",auction->startGebot);
iniSM()
auktionsStruct * tmpauction; if((kennung=shmget(IPC_PRIVATE,sizeof(auktionsStruct),0666))==-1) printf("Kann SM nicht anlegen\n"); if((tmpauction==(auktionsStruct*)shmat(kennung,NULL,(SHM_R|SHM_W)))<0) printf("Kann SM nicht anschliessen"); return tmpauction;
Ich weiß nett wo der fehler liegen soll.
thx 4 help
-
Edit:
Noch das Structtypedef struct { int startGebot; // Startgebot long aktuellesGebot; // aktuelles Gebot short hgClient; // Nummer des höchstbietenden Clients long startZeit; // Startzeit der Auktion long endeZeit; // Endezeit der Auktion short flag; // run =1, Stop = 0, Acknowledge= 1000, weitere Kennungen } auktionsStruct;
-
ich gehe mal davon aus, dass der Fehler/Coredump erst beim printf() erfolgt und der ptr "auction" ungleich 0 ist.
Ich habe das mal mit meiner Standard-Routine verglichen (da nehme ich zwar nicht IPC-PRIVATE), kann auf Anhieb aber keinen wesentlichen Unterschied oder Fehler erkennen. Einziger Unterschied:
Ich benutze beim shmat() als 3. Parameter "0", also etwa:
... = shmat(kennung,NULL,0)
Vielleicht hilfts?
P.S.: Beim shmat() würde ich nicht auf <0 prüfen, da eine Addresse zurückkommt, die je nach Maschine/System ggf. auch das oberste Bit gesetzt haben kann. Also besser etwa:
cp = (char *) shmat(shmid,NULL,0); if ((cp == NULL) || (cp == ((char *) -1))) { ... }
-
Nachdem ich mir mal nen klaren Kopfgemacht habe und nochmal den Code überflogen habe. Hab ich den Fehler nun gefunden.
auktionsStruct * tmpauction; if((kennung=shmget(IPC_PRIVATE,sizeof(auktionsStruct),0666))==-1) printf("Kann SM nicht anlegen\n"); if(([b]tmpauction==(auktionsStruct*)[/b]shmat(kennung,NULL,(SHM_R|SHM_W)))<0) printf("Kann SM nicht anschliessen"); return tmpauction;
Hier fett markiert natürlich sollte das eine Zuweisung sein kein Vergleich. Kann man ja so leicht übersehen.
Aber danke für die Tips werde ich gleich anwenden.
-
@Zed
bist du zufällig von der HS Albsig, 4. Semester?
-
Hiermit bestätige ich die Welt ist klein.
Ja bin ich
-
tja ja, das auktionsStruct hat dich verraten
ich werde noch Nachtschicht schieben, sonst wird das nix...