Не могу понять ошибку - PullRequest
0 голосов
/ 17 января 2020

Пытался отладить и выяснить, как найти решение, но я все время получаю одну и ту же ошибку памяти. У меня есть файл

2015-07-22 09:00:00 1346137 13.03 25.13 6.474 3.805 0.832 25.84
2015-07-22 09:01:00 1346138 13.03 25.15 6.5 3.84 0.834 25.89

, и я пытаюсь передать эти значения в структуру и записать их в двоичном формате в другой файл. позже я должен взять двоичный файл, прочитать его и вставить его содержимое в консоль следующим образом:

| Time Stamp  | Temperature   |     Measurements   |

|Hour min sec  |Environmental |  m1      m2     m3   |

==================================

|   9 : 0 : 0     |        25.84        | 6.47 | 3.81 | 0.83 |

|   9 : 1 : 0     |        25.89        | 6.50 | 3.84 | 0.83 |

|   9 : 2 : 0     |        26.02        | 6.48 | 3.85 | 0.84 |

ниже приведен мой исходный код, который я переписал другим способом

    #define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

#define READ_ONLY "r"
#define WRITE_BINARY "wb"
#define READ_BINARY "rb"

#define MEM_ALLOC_ERR 1234
#define NO_SUCH_PATH 1235

#define NEW(type, elements) ((type* )calloc(elements, sizeof(type)))
#define LOG(message, code) {printf("%s", message); exit(code);}

typedef struct Time {
    int hh, mm, ss;
}*p_time_t;

typedef struct Log 
{
    char        date[11];
    p_time_t    time;
    uint32_t    index;
    double      voltage,
                logger_temperature,
                sun_shooting,
                sixth_field,
                seventh_field,
                env_temperature;
}*p_log_t;

FILE* OpenFile(const char* path, const char* type) {
    FILE* fptr = NULL;
    fptr = fopen(path, type);
    if (!fptr)LOG("File cant be found", NO_SUCH_PATH);
    return fptr;
}

p_log_t CreateLog()
{
    p_log_t new_log = NULL;
    new_log = NEW(Log, 1);
    if (!new_log)LOG("Memmory allocation failed", MEM_ALLOC_ERR);

    new_log->time = NEW(Time, 1);
    if (!new_log->time)LOG("Memmory allocation failed", MEM_ALLOC_ERR);

    return new_log;
}

void InitLog(FILE* fptr, p_log_t log){
    if(fscanf(fptr, "%s %d:%d:%d %u %lf %lf %lf %lf %lf %lf",
        log->date,
        &(log->time->hh),
        &(log->time->mm),
        &(log->time->ss),
        &log->index,
        &log->voltage,
        &log->logger_temperature,
        &log->sun_shooting,
        &log->sixth_field,
        &log->seventh_field,
        &log->env_temperature));
}

void PrintLog(p_log_t log)
{
    printf("%s %d %d %d %u %lf %lf %lf %lf %lf %lf",
        log->date,
        log->time->hh,
        log->time->mm,
        log->time->ss,
        log->index,
        log->voltage,
        log->logger_temperature,
        log->sun_shooting,
        log->sixth_field,
        log->seventh_field,
        log->env_temperature);
}

int main(int argc, char** argv)
{
    FILE* input_file = OpenFile("DataMeteo-E5.txt", READ_ONLY);

    p_log_t log = CreateLog();

    p_log_t* logs = NULL;
    int count = 0;
    FILE* output_file = OpenFile("DataMeteo-E5.MyExtension", WRITE_BINARY);
    while (!feof(input_file))
    {
        InitLog(input_file, log);
        if (log->env_temperature < 26.5 || log->env_temperature > 32.5)
        {
            fwrite(log, sizeof(Log), 1, output_file);
            count++;
            if (count == 1)logs = NEW(p_log_t, 1);
            else logs = (p_log_t*)realloc(logs, sizeof(Log)*count);
        }
    }
    fclose(output_file);

    output_file = OpenFile("DataMeteo-E5.MyExtension", READ_BINARY);

    fread(logs, sizeof(Log), count, output_file);

    for (int i = 0; i < 2; i++)
    {
        PrintLog(logs[i]);
    }

    return EXIT_SUCCESS;
}

Что я делаю не так, и я получаю ошибку?

...