I've made a program that takes information from a list of mp3s in a text file and stores them into a structure, which is then looked up using an array of pointers.
Each mp3 has the info: Track No - Title - Artist - Album - Genre
My program was working fine until tonight when I added a function that looks up all the different genres of music and displays a list of the genres to the user (I later want to allow the user to select one of these genres and have a playlist created with all the mp3s in this genre).
Now whenever I execute the program, it stops when it reaches the part when the new function is used, saying:
Code:
lab1.exe has encountered a problem and needs to close. We are sorry for the inconvenience.
I tried to Debug, and it gave me this message
Code:
Unhandled exception in mp3list.exe: 0xC0000005: Access violation
Does anyone know what the problem might be?
Here is the code I have written. The function that's causing the problem is the 'lookupgenres' function.
Code:
/* A program to take information from a .txt file and store it in structures
which can be looked up via an array of pointers */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <console_lib.h>
#include <conio.h>
typedef struct mp3info
{
char title[100];
char artist[100];
char album[100];
char genre[100];
} SONG;
void lookupgenres ( SONG *array[20001] )
{
typedef struct genrelist
{
char name[100];
struct genrelist *next;
} GENRES;
int tracknumber;
GENRES genre;
GENRES *current;
int compare;
int count;
/* Check through all tracks for different genres */
for ( tracknumber = 1; tracknumber <= 100; tracknumber++ )
{
/* Check to see if genre has been added */
/* If the genre list is empty, the check does not need to be made and the
genre of the first track can be added to the list */
if ( genre.name == NULL )
strcpy ( genre.name, array[tracknumber]->genre );
else
{
compare = 1;
current = &genre;
compare = strcmp ( current->name, array[tracknumber]->genre );
while ( ( compare != 0 ) && ( current->next != NULL ) )
{
current = current->next;
compare = strcmp ( current->name, array[tracknumber]->genre );
}
/* If the genre has not been added to the list, add it */
if ( compare != 0 )
{
current = &genre;
while ( current->next != NULL )
current = current->next;
current->next = malloc ( sizeof ( GENRES ) );
current = current->next;
strcpy ( current->name, array[tracknumber]->genre );
}
}
}
current = &genre;
for ( count = 1; count != 0 ; count++ )
{
printf ( "%d - %s\n", count, current->name );
if ( current->next != NULL )
current = current->next;
else
count = 0;
}
}
/* ------------------------------------------------------------------------ */
int main (void)
{
char string[500];
int tracknumber;
SONG *current;
SONG *array[20001];
/* Open file mp3list.txt for reading */
FILE *fp;
fp = fopen ( "C:\\mp3list.txt", "r" );
while ( tracknumber < 100 )
{
fgets ( string, 500, fp );
current = store ( string, &tracknumber );
array[tracknumber] = current;
printf ( "%d - %s - %s - %s - %s", tracknumber, current->title, current->artist, current->album, current->genre );
}
printf ( "Loading Complete!\n\n");
lookupgenres ( array );
return 0;
}
If anyone has any idea where I might be going wrong with this the help would be really appreciated!