diff --git a/imageInput.c b/imageInput.c index 791a49b..3d06060 100644 --- a/imageInput.c +++ b/imageInput.c @@ -12,9 +12,11 @@ static void einzelBild(unsigned char *px_ls, FILE *file, GrayScaleImageSeries *s bild.height = hoehe; bild.width = breite; bild.buffer = malloc(sizeof(GrayScalePixelType)*hoehe*breite); + if(bild.buffer == NULL){ + return; + } int anz = fread(px_ls,sizeof(unsigned char), hoehe*breite +1, file); - //printf("Test\n%d\n%d\n",anz, (breite*hoehe + 1)); if(anz == (breite*hoehe + 1)){ series->labels[bildnummer] = px_ls[breite*hoehe]; @@ -42,16 +44,29 @@ GrayScaleImageSeries *readImages(const char *path) ausgelesen = malloc(sizeof(char)*BUFFER_SIZE); + + if(anzahl_ls == NULL || breite_ls == NULL ||hoehe_ls == NULL || ausgelesen == NULL){ + return series; + } + file = fopen(path,"rb"); if(file==NULL){ //Fehlerbehandlung printf("Fehler bei File-Suche\n"); + free(anzahl_ls); + free(breite_ls); + free(hoehe_ls); + free(ausgelesen); fclose(file); return series; } - fread(ausgelesen,sizeof(char), strlen(FILE_HEADER_STRING), file); + fread(ausgelesen,sizeof(unsigned char), strlen(FILE_HEADER_STRING), file); - if(strcmp(ausgelesen,FILE_HEADER_STRING)!=0){ + if(memcmp(ausgelesen,FILE_HEADER_STRING,strlen(FILE_HEADER_STRING))!=0){ printf("Kein richtiger File-Header vorhanden\n"); + free(anzahl_ls); + free(breite_ls); + free(hoehe_ls); + free(ausgelesen); fclose(file); return series; } @@ -64,16 +79,35 @@ GrayScaleImageSeries *readImages(const char *path) breite = breite_ls[0]; hoehe = hoehe_ls[0]; series = malloc(sizeof(GrayScaleImageSeries)*(1+anzahl_ls[0]+anzahl_ls[0]*breite*hoehe)); + if(series == NULL){ + return series; + } series->count = anzahl_ls[0]; - //printf("%d\n%d\n%d\n",series->count, breite, hoehe); series->images = malloc(sizeof(GrayScaleImage)*series->count); series->labels = malloc(sizeof(unsigned char)*series->count); + if (series->images == NULL || series->labels == NULL){ + free(anzahl_ls); + free(breite_ls); + free(hoehe_ls); + free(ausgelesen); + fclose(file); + return series; + } } } } px_ls = malloc(sizeof(GrayScalePixelType)*hoehe*breite +1); //Speicheranpassung für Einlese-Buffer + if(px_ls == NULL){ + free(anzahl_ls); + free(breite_ls); + free(hoehe_ls); + free(px_ls); + free(ausgelesen); + fclose(file); + return series; + } for(int bildnummer=0; bildnummer count;bildnummer++){ einzelBild(px_ls, file, series, breite, hoehe, bildnummer); @@ -100,7 +134,6 @@ void clearSeries(GrayScaleImageSeries *series) free(series->images[i].buffer); } } - printf("Test\n"); free(series->labels); free(series->images); free(series); diff --git a/imageInputTests.c b/imageInputTests.c index 03240ab..b92a58a 100644 --- a/imageInputTests.c +++ b/imageInputTests.c @@ -13,11 +13,11 @@ static void prepareImageFile(const char *path, unsigned short int width, unsigne if(file != NULL) { const char *fileTag = "__info2_image_file_format__"; - GrayScalePixelType *zeroBuffer = (GrayScalePixelType *)calloc(numberOfImages * width * height, sizeof(GrayScalePixelType)); + GrayScalePixelType *zeroBuffer = calloc(width * height, sizeof(GrayScalePixelType)); if(zeroBuffer != NULL) { - fwrite(fileTag, sizeof(fileTag[0]), strlen(fileTag), file); + fwrite(fileTag, sizeof(const char), strlen(fileTag), file); fwrite(&numberOfImages, sizeof(numberOfImages), 1, file); fwrite(&width, sizeof(width), 1, file); fwrite(&height, sizeof(height), 1, file); diff --git a/matrix.c b/matrix.c index 29bdc8f..b996cb0 100644 --- a/matrix.c +++ b/matrix.c @@ -18,8 +18,9 @@ Matrix createMatrix(unsigned int rows, unsigned int cols) { } matrix.rows = rows; matrix.cols = cols; - memset(matrix.buffer, UNDEFINED_MATRIX_VALUE, rows*cols); - + for (unsigned int i=0;ibuffer); - matrix->rows = 0; - matrix->cols = 0; - matrix->buffer = NULL; - free(matrix->buffer); + if(matrix != NULL){ + if(matrix->buffer != NULL) + free(matrix->buffer); + matrix->rows = 0; + matrix->cols = 0; + matrix->buffer = NULL; + } } void setMatrixAt(MatrixType value, Matrix matrix, unsigned int rowIdx, unsigned int colIdx) { - if(rowIdx<(matrix.rows) && colIdx<(matrix.cols)){ - matrix.buffer[matrix.cols*rowIdx + colIdx]=value; + if(matrix.buffer != NULL){ + if(rowIdx<(matrix.rows) && colIdx<(matrix.cols)){ + matrix.buffer[matrix.cols*rowIdx + colIdx]=value; + } } } @@ -59,6 +64,9 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) output.rows = matrix1.rows; output.cols = matrix1.cols; output.buffer = malloc(sizeof(MatrixType)*output.rows*output.cols); + if(output.buffer == NULL){ + return output; + } for (int i=0;i