Пытался отладить и выяснить, как найти решение, но я все время получаю одну и ту же ошибку памяти. У меня есть файл
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;
}
Что я делаю не так, и я получаю ошибку?