Ich habe das seit Stunden versucht, und google all die Dinge, an die ich denke, aber ich werde verrückt.Zeiger innerhalb des gemeinsamen Speichersegments
Ich habe eine Struktur:
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
Ich weiß nicht, die Größen der int * (eine Matrix) und char *, bis später.
Wenn ich schaffe ich den gemeinsam genutzten Speicher wie folgt aus:
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);
}
hier kein Problem. Dann gebe ich einen Wert für ctrl-> rows und collumns und weise 0 der gesamten Matrix zu.
Aber danach schreibe ich etwas in den Segmentierungsfehler char * und bam.
Debuggen des Programms Ich sah, dass beide Zeiger, Matte und IDs_row Null. Wie gebe ich ihnen die richtigen Werte innerhalb des Shared-Memory-Segments?
Ich habe versucht, den char * -Zeiger zu entfernen, nur um es zu versuchen, und dann der segmentation Fehler Fehler in dem anderen Programm, das mit dem Shared Memory verbunden ist und überprüft nur die Werte innerhalb der Matrix (Prüfung -> Zeilen und -> collumns war succesfull)
Vielen Dank! Ich hatte nie daran gedacht, das Shmget für jeden Zeiger zu machen. (Ich verstehe nicht einmal, wie das funktioniert, den gleichen Aufruf, aber "Casting") Jetzt gibt es ein Problem mit der zweiten Ganzzahl in der Struktur, die "Spalten". Ich gebe dort eine "1" in einem Prozess und der andere Prozess liest es als 62045 oder so ähnlich. Ich habe versucht, sizeof (ctrl) zu sizeof (Männer) und 2 * sizeof (int) + sizeof (int *) + sizeof (char *) zu ändern, aber kein Glück. – Knudow
Entschuldigung, ich habe die Nachricht gesendet und dann bearbeitet. Kannst du mir ein bisschen mehr helfen? Ich habe jetzt ein Problem mit der zweiten Ganzzahl in der Struktur. – Knudow
@ user1420534 Bitte posten Sie eine neue Frage mit dieser neuen Ausgabe, sie scheinen nicht verwandt zu sein. –