diff --git a/imageInput.c b/imageInput.c index 0859c85..e3d3b9a 100644 --- a/imageInput.c +++ b/imageInput.c @@ -43,7 +43,7 @@ static int readHeader(FILE *file, unsigned int *count, unsigned int *width, unsi *width = (unsigned int)temp_height; // <-- Wegen des Test-Bugs: Gelesene HÖHE als BREITE zuweisen. *height = (unsigned int)temp_width; // <-- Wegen des Test-Bugs: Gelesene BREITE als HÖHE zuweisen. - return 1; // Ladevorgang erfolgreich. + return 1; //gibt 1 bei Erfolg zurück } @@ -63,18 +63,17 @@ GrayScaleImageSeries *readImages(const char *path) return NULL; // Fehler beim Öffnen. } - if (!readHeader(file, &count, &width, &height)) // Lade den Header. Wenn fehlerhaft, aufräumen und abbrechen. - { + if (!readHeader(file, &count, &width, &height)) //überprüfung ob header eingelesen werden kann + { // wenn nicht return NULL fclose(file); return NULL; } - // --- Dynamische Speicherreservierung (Heap) --- - // 1. Hauptstruktur reservieren - series = (GrayScaleImageSeries *)malloc(sizeof(GrayScaleImageSeries)); + // Dynamic Memory Allocation + series = (GrayScaleImageSeries *)malloc(sizeof(GrayScaleImageSeries)); //reserviert Speicher if (series == NULL) { - fclose(file); + fclose(file); //wenn kein Speicher -> NULL und Datei schließen return NULL; } @@ -82,10 +81,9 @@ GrayScaleImageSeries *readImages(const char *path) series->images = NULL; // Pointer vorläufig auf NULL setzen (für clearSeries im Fehlerfall). series->labels = NULL; - size_t num_pixels = (size_t)width * height; // Gesamtanzahl der Pixel pro Bild berechnen. + size_t num_pixels = (size_t)width * height; //berechnet die Anzahl der Pixel pro Bild (size_t weil pixelanzahl groß sein kann) - // 2. Array für die Bild-Strukturen (GrayScaleImage) reservieren. - series->images = (GrayScaleImage *)malloc(count * sizeof(GrayScaleImage)); + series->images = (GrayScaleImage *)malloc(count * sizeof(GrayScaleImage)); //reserviert Speicher if (series->images == NULL) { clearSeries(series); // Im Fehlerfall: bisher reservierten Speicher freigeben. @@ -97,7 +95,7 @@ GrayScaleImageSeries *readImages(const char *path) series->labels = (unsigned char *)malloc(count * sizeof(unsigned char)); if (series->labels == NULL) { - clearSeries(series); + clearSeries(series); //bei fehler: alles ferigeben und abbrechen fclose(file); return NULL; } @@ -112,7 +110,7 @@ GrayScaleImageSeries *readImages(const char *path) series->images[i].buffer = (GrayScalePixelType *)malloc(num_pixels * sizeof(GrayScalePixelType)); if (series->images[i].buffer == NULL) { - clearSeries(series); + clearSeries(series); //wenn kein speicher: alles freigeben fclose(file); return NULL; } @@ -120,7 +118,7 @@ GrayScaleImageSeries *readImages(const char *path) // Pixeldaten einlesen (num_pixels Elemente, jedes sizeof(GrayScalePixelType) groß). if (fread(series->images[i].buffer, sizeof(GrayScalePixelType), num_pixels, file) != num_pixels) { - clearSeries(series); // Fehler beim Lesen der Pixeldaten. + clearSeries(series); //wenn nicht genau diese anzahl eingelesen werden konnte -> Abbruch fclose(file); return NULL; } @@ -128,7 +126,7 @@ GrayScaleImageSeries *readImages(const char *path) // Label einlesen (ein einzelnes Byte). if (fread(&series->labels[i], sizeof(unsigned char), 1, file) != 1) { - clearSeries(series); // Fehler beim Lesen des Labels. + clearSeries(series); //wenn nicht genau 1 byte eingelesen wurde -> Fehler fclose(file); return NULL; } @@ -151,21 +149,21 @@ void clearSeries(GrayScaleImageSeries *series) { if (series->images[i].buffer != NULL) // Wenn ein Pixelpuffer reserviert wurde... { - free(series->images[i].buffer); // ...diesen Pixelpuffer freigeben. - series->images[i].buffer = NULL; // Pointer auf NULL setzen. - } - } + free(series->images[i].buffer); //gibt den Pixelbuffer des i-ten Bildes frei + series->images[i].buffer = NULL; + } //setzt pointer auf NULL + } //bis hier wurden nur pixelbuffer weggeräumt, aber nicht das (array) image selbst - free(series->images); // Das Array der GrayScaleImage-Strukturen freigeben. + free(series->images); //gesamte image block wird aus dem heap mit free freigegeben series->images = NULL; } if (series->labels != NULL) // Prüfen, ob das Label-Array existiert. { - free(series->labels); // Label-Speicher freigeben. + free(series->labels); //sonst speicher für alle labels freigeben und pointer auf NULL setzen series->labels = NULL; } - free(series); // Die Hauptstruktur GrayScaleImageSeries freigeben. + free(series); //serie wird aus dem speicher freigegeben } } \ No newline at end of file diff --git a/matrix.c b/matrix.c index 516a5de..c766d11 100644 --- a/matrix.c +++ b/matrix.c @@ -3,7 +3,6 @@ #include #include "matrix.h" -// Reserviert dynamischen Speicher für eine Matrix der Größe rows x cols und initialisiert sie mit Nullen. Matrix createMatrix(unsigned int rows, unsigned int cols) { // Struktur für die Rückgabe vorbereiten (wird im Fehlerfall zurückgegeben). @@ -143,24 +142,23 @@ Matrix multiply(const Matrix matrix1, const Matrix matrix2) result.buffer = NULL; return result; } - - // Ergebnis-Matrix hat Dimension: (matrix1.rows) x (matrix2.cols) - Matrix result = createMatrix(matrix1.rows, matrix2.cols); - if (result.buffer == NULL) return result; // Fehler bei Speicherreservierung. - - // i: Reihe (Ergebnis), j: Spalte (Ergebnis), k: Innere Dimension (Summe) - for (unsigned int i = 0; i < result.rows; i++) + else { - for (unsigned int j = 0; j < result.cols; j++) + Matrix result = createMatrix(matrix1.rows, matrix2.cols); //erzeugt matrix result + if (result.buffer == NULL) return result; //result buffer auf NULL? + + for (unsigned int i = 0; i < result.rows; i++) //geht über alle zeilen der ergebnismatrix { - MatrixType summe = 0; - for (unsigned int k = 0; k < matrix1.cols; k++) + for (unsigned int j = 0; j < result.cols; j++) //geht über alle spalten der ergebnismatrix { - // Element (i, j) = Summe von (matrix1[i, k] * matrix2[k, j]) - summe += getMatrixAt(matrix1, i, k) * getMatrixAt(matrix2, k, j); + MatrixType summe = 0; //variable wo die matrix summe reingeladen wird + for (unsigned int k = 0; k < matrix1.cols; k++) + { + summe += getMatrixAt(matrix1, i, k) * getMatrixAt(matrix2, k, j); //get(matrix;row;col) k=col1;row2 + } + setMatrixAt(summe, result, i, j); //summe wird in matrix result geladen } - setMatrixAt(summe, result, i, j); } + return result; } - return result; } \ No newline at end of file