- First Issue: - arr[i].song = (char*)malloc(sizeof(char));
arr[i].artist = (char*)malloc(sizeof(char));
 - Are only allocating 1 byte for your - char*pointers,- songand- artist. You can allocate a size for this:
 - arr[i].song = (char*)malloc(100 * sizeof(char)); /* or malloc(100) */
arr[i].artist = (char*)malloc(100 * sizeof(char));
 - Or you can simply - malloc()enough space from you buffer:
 - char buffer[100];
fgets(buffer, 100, input);
/* check for failure, remove newline */
arr[i].song = malloc(strlen(buffer)+1);
/* check error from malloc */
strcpy(arr[i].song, buffer);
 - Or even use - strdup():
 - arr[i].song = strdup(buffer);
 - Which is a substitute for - malloc()/- strcpy().
 - Note: You can also read Do I cast the result of malloc?.  
- Second Issue: - Your current - struct:
 - typedef struct Song {
    char *song;
    char *artist;
    int *year;
} Song;
 - Can be simplified to: - typedef struct {
    char *song;
    char *artist;
    int year;
} Song;
 - Because - yeardoes not need to be a pointer. Easier to manage if its just an- int. This avoids having to do allocations like:
 - arr[i].year = (int*)malloc(sizeof(int));
 
- Other Recommendations:
You should check the return of - fscanf()and- fgets()as its safe to do this. It helps just incase your file will have incorrect data. This goes the same for- malloc(), which can return- NULLis unsuccessfully allocated on the heap.
 
Here is some code with the above considerations in mind:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct {
    char *song;
    char *artist;
    int year;
} Song;
Song *create_array(FILE *input, int *nrof);
void load_data(Song *arr, FILE *input, int nrof);
void print_free_data(Song *arr, int nrof);
void get_buffer(char buffer[], FILE *input);
int main(void) {
    FILE *input;
    Song *arr;
    int nrof;
    input = fopen("artist.txt", "r");
    if (input == NULL) {
        fprintf(stderr, "Error reading file\n");
        exit(EXIT_FAILURE);
    }
    arr = create_array(input, &nrof);
    load_data(arr, input, nrof);
    print_free_data(arr, nrof);
    fclose(input);
    return 0;
}
Song *create_array(FILE *input, int *nrof) {
    Song *arr;
    if (fscanf(input, "%d ", nrof) != 1) {
        fprintf(stderr, "Cannot find number of songs\n");
        exit(EXIT_FAILURE);
    }
    arr = malloc(*nrof * sizeof(*arr));
    if (arr == NULL) {
        fprintf(stderr, "Cannot allocate %d spaces for array\n", *nrof);
        exit(EXIT_FAILURE);
    }
    return arr;
}
void load_data(Song *arr, FILE *input, int nrof) {
    char buffer[SIZE];
    for (int i = 0; i < nrof; i++) {
        get_buffer(buffer, input);
        arr[i].song = malloc(strlen(buffer)+1);
        if (arr[i].song == NULL) {
            fprintf(stderr, "Cannot allocate song\n");
            exit(EXIT_FAILURE);
        }
        strcpy(arr[i].song, buffer);
        get_buffer(buffer, input);
        arr[i].artist = malloc(strlen(buffer)+1);
        if (arr[i].artist == NULL) {
            fprintf(stderr, "Cannot allocate artist\n");
            exit(EXIT_FAILURE);
        }
        strcpy(arr[i].artist, buffer);
        if (fscanf(input, "%d ", &arr[i].year) != 1) {
            fprintf(stderr, "Cannot find year for Song: %s Album: %s\n", 
                             arr[i].song, arr[i].artist);
            exit(EXIT_FAILURE);
        }
    }
}
void get_buffer(char buffer[], FILE *input) {
    size_t slen;
    if (fgets(buffer, SIZE, input) == NULL) {
        fprintf(stderr, "Error from fgets(), line not read\n");
        exit(EXIT_FAILURE);
    }
    slen = strlen(buffer);
    if (slen > 0 && buffer[slen-1] == '\n') {
        buffer[slen-1] = '\0';
    } else {
        fprintf(stderr, "Too many characters entered\n");
        exit(EXIT_FAILURE);
    }
}
void print_free_data(Song *arr, int nrof) {
    for (int i = 0; i < nrof; i++) {
        printf("%s\n%s\n%d\n\n", arr[i].song, arr[i].artist, arr[i].year);
        free(arr[i].song);
        arr[i].song = NULL;
        free(arr[i].artist);
        arr[i].artist = NULL;
    }
    free(arr);
    arr = NULL;
}
Which Outputs correct data:
Mr Tambourine Man
Bob Dylan
1965
Dead Ringer for Love
Meat Loaf
1981
Euphoria
Loreen
2012
Love Me Now
John Legend
2016