Ich versuche, ein 2D-Array (Matrix) im Shared Memory zu speichern. Ich bin mit ubuntu und C.Speichern einer Struktur mit Vektoren im Shared Memory inc C
Das ist mein Code:
Die Struktur
typedef struct {
int data[COLUN_CAP];
} Colonna;
typedef struct {
int nc;
key_t colK;
Colonna colonne[10];
} Matrix;
Die Funktion, die die Matrix initiiert:
void iniz_mat(Matrix *M, int n) {
M->nc = n;
int i, k;
for (i = 0; i < M->nc; i++) {
printf("Colonna: %d \n", i);
for (k = 0; k < COLUN_CAP; k++) {
M->colonne[i].data[k] = rand() % 10;
}
}
}
Hauptprogramm
key_t shmKM;
int n;
shmKM = ftok(PATH_SHM, CHAR_SHMM);
scanf("%d", &n);
int idshmM = shmget(shmKM, sizeof(Matrix) + sizeof(Colonna) * 10, IPC_CREAT | 0664);
Matrix *Mat;
Mat = (Matrix *)shmat(idshmM, 0, 0);
iniz_mat(Mat, n);
ich ge t Segmentierungsfehler (Core Dumped) Fehler. Ich habe versucht, eine Matrix mit einer variablen Anzahl von Spalten zu speichern, aber anscheinend kann ich keine feste speichern. Tipps?
edit: Also, für die Variable Menge von Spalten Ich habe versucht:
typedef struct {
int nc;
key_t colK;
Colonna colonne[];
} Matrix;
und natürlich:
int idshmM = shmget(shmKM, sizeof(Matrix) + sizeof(Colonna) * n, IPC_CREAT | 0664);
es keine Fehler nicht geben, aber wenn ich drucke die Matrix Ich bekomme nur die ersten 2 Zeilen jeder Spalte.
Der Code für die Druckfunktion ist die folgende:
void print_matrix(Matrix *M) {
int i, k;
for (k = 0; k < COLUN_CAP; k++) {
for (i = 0; i < M->nc; i++)
printf("%d ", M->colonne[k].data[i]);
printf("\n");
}
}
So bekomme ich die visuelle Darstellung der Matrix. COLUN_CAP
ist die Anzahl der Elemente jeder Spalte und wird auf 5
festgelegt.
Oh die Druckfunktion ist falsch (invertiert ich und k) Ich fühle mich so dumm. Danke an alle für die Hilfe!
Ihr Code enthält kein 2D-Array. Und nichts, das man mit entsprechender Semantik als Eins verwenden könnte. – Olaf
Wie könnte ich diese Struktur im Shared Memory speichern? – alteration
Vorschlagen Sie, indem Sie Fehlerprüfcode hinzufügen, um den Rückgabewert aller Funktionen zu überprüfen. Wenn der Fehler nicht angezeigt wird, verwenden Sie einen Debugger. Und schließlich, wenn Sie es immer noch nicht erarbeiten können, posten Sie bitte ein [minimales vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) einschließlich des Eingabewertes. – kaylum