From 6d162b313cea30583441c6c8fa4442f88b0ec881 Mon Sep 17 00:00:00 2001 From: Laila Date: Thu, 13 Nov 2025 10:48:09 +0100 Subject: [PATCH] =?UTF-8?q?clearSeries=20und=20Kommentare=20erg=C3=A4nzt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- info2praktikum-neuronalesnetz/imageInput.c | 25 ++++++++++++++++++++++ info2praktikum-neuronalesnetz/matrix.c | 17 ++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/info2praktikum-neuronalesnetz/imageInput.c b/info2praktikum-neuronalesnetz/imageInput.c index 4d04984..95dc8b8 100644 --- a/info2praktikum-neuronalesnetz/imageInput.c +++ b/info2praktikum-neuronalesnetz/imageInput.c @@ -195,4 +195,29 @@ GrayScaleImageSeries *readImages(const char *path) // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { + //prüfen, ob series überhaupt bereinigt werden muss + if(series == NULL){ + return; + } + + //images freigeben und NULL setzen -> jeden Index der Images durchgehen und buffer freigeben + if(series->images != NULL){ + for(unsigned int i = 0; i < series->count; i++){ + if (series->images[i].buffer != NULL){ + free(series->images[i].buffer); + series->images[i].buffer = NULL; + } + } + free(series->images); // wenn alle images bereinigt sind, den Zeiger Images selbst bereinigen + series->images = NULL; + } + + //labels freigeben und NULL setzen + if(series->labels != NULL){ + free(series->labels); + series->labels = NULL; + } + + //series freigeben + free(series); } \ No newline at end of file diff --git a/info2praktikum-neuronalesnetz/matrix.c b/info2praktikum-neuronalesnetz/matrix.c index 8ec59fd..6d5ae0f 100644 --- a/info2praktikum-neuronalesnetz/matrix.c +++ b/info2praktikum-neuronalesnetz/matrix.c @@ -10,12 +10,12 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) Matrix matrix; matrix.rows = rows; matrix.cols = cols; - if(matrix.rows == 0 || matrix.cols == 0){ + if(matrix.rows == 0 || matrix.cols == 0){ // prüfen, ob ungültige Dimensionen übergeben wurden, wenn ja, "error matrix" erstellen matrix.rows = 0; matrix.cols = 0; matrix.buffer = NULL; } - else { + else { // für gültige Dimensionen: Speicher allokieren matrix.buffer = (float *)malloc(rows * cols * sizeof(MatrixType)); } @@ -36,19 +36,19 @@ void clearMatrix(Matrix *matrix) void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ + if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ // Gültigkeit der Dimensionen prüfen return; } - matrix.buffer[rowIdx * matrix.cols + colIdx] = value; + matrix.buffer[rowIdx * matrix.cols + colIdx] = value; // value an vorgebenener Stelle setzen } MatrixType getMatrixAt(const Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ + if(rowIdx >= matrix.rows || colIdx >= matrix.cols){ // Gültigkeit der Dimensionen prüfen return 0; } MatrixType value; - value = matrix.buffer[rowIdx * matrix.cols + colIdx]; + value = matrix.buffer[rowIdx * matrix.cols + colIdx]; // value an vorgegebener Stelle auslesen return value; } @@ -73,13 +73,14 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) Matrix multiply(const Matrix matrix1, const Matrix matrix2) { - if (matrix1.cols != matrix2.rows){ + if (matrix1.cols != matrix2.rows){ // prüfen, ob Matrizen multipliziert werden dürfen Matrix errorMatrix = createMatrix(0, 0); errorMatrix.buffer = NULL; return errorMatrix; } - Matrix matrix3 = createMatrix(matrix1.rows, matrix2.cols); + Matrix matrix3 = createMatrix(matrix1.rows, matrix2.cols); // Ergebnis-Matrix erstellen + // Algorithmus für Multiplikation for( size_t i = 0; i < matrix1.rows; i++){ for(size_t j = 0; j < matrix2.cols; j++){ MatrixType sum = 0;