Для начала вам нужно передать функции количество элементов в массиве. Таким образом, объявление функции должно выглядеть следующим образом:
void fileToArray( struct Processes dataArray[], size_t n, FILE *fp );
. И лучше, когда функция возвращает количество заполненных элементов массива.
size_t fileToArray( struct Processes dataArray[], size_t n, FILE *fp );
и функцию можно вызывать внаименее похоже на
size_t n = fileToArray( dataArray, 10, fp );
В этом объявлении
int a, b, c = 0;
только переменная c
инициализируется. Все остальные переменные, a и b, не инициализируются. Так, например, это утверждение
dataArray[a].pName = malloc(strlen(ptr + 1));
приводит к неопределенному поведению.
Это выражение
malloc(strlen(ptr + 1))
недопустимо. Это эквивалентно
malloc(strlen( &ptr[1] ))
И нет никакого смысла сразу освобождать память после ее выделения.
free(dataArray[a].pName);
Функцию можно определить следующим образом
size_t fileToArray( struct Processes dataArray[], size_t n, FILE *fp )
{
// temp[14] because 14 is the max size a line can be
char temp[14];
char delim[] = " \n";
size_t i = 0;
for( ; i < n && fgets( temp, sizeof( temp ), fp) != NULL; i++ )
{
dataArray[i].pName = NULL;
dataArray[i].arvTime = NULL;
dataArray[i].srvTime = NULL;
char *ptr = strtok( temp, delim );
for( size_t j = 0; j < 3 && ptr != NULL; j++ )
{
switch ( j )
{
case 0:
dataArray[i].pName = malloc( strlen( ptr ) + 1 );
strcpy( dataArray[i].pName, ptr );
break;
case 1:
dataArray[i].arvTime = malloc( strlen( ptr ) + 1 );
strcpy( dataArray[i].arvTime, ptr );
break;
case 2:
dataArray[i].srvTime = malloc( strlen( ptr ) + 1 );
strcpy( dataArray[i].srvTime, ptr );
break;
}
ptr = strtok( NULL, delim );
}
}
return i;
}