Odczytywanie linijek do pliku

0

Mam taki kod:

void loadPlaylist()
{
    FILE *f;
    size_t FileSize;
    unsigned char *Data;

    f = fopen("playlist.db","r");
    fseek(f,0,SEEK_END);
    FileSize = ftell(f);
    fseek(f,0,SEEK_SET);
    Data = (unsigned char*)malloc(FileSize+1);
    FileSize = fread(Data,1,FileSize,f);
    Data[FileSize] = 0;
    fclose(f);
    int lines = 0, x = 0, y = 0, max = 0;
    while (true)
    {
        if (Data[x] == '\n')
        {
            if (max < y) max = y;
            y = x;
            lines++;
        }
        x++;
        if (x >= FileSize) break;
    }
    playlist = new char*[lines];
    y = 0;
    int i = 0;
    x = 0;
    while (true)
    {
        if (Data[x] == '\n')
        {
            playlist[i] = new char[max];
            Data[x] = '\0';
            memcpy(playlist[i],Data+y,x-y+1);
            i++;
            y = x;
        }
        x++;
        if (x >= FileSize) break;
    }
}

//tablicę deklaruję na samym początku kodu tak: char** playlist;

Czyli chcę w osobnych elementach playlist mieć każdą linijkę pliku, ale dostaję access violation, dlaczego i co naprawić?

0
Heniut napisał(a):

... dlaczego i co naprawić?

Naprawić - od fclose(f); do końca.
Dlaczego - bo to jakieś głupoty.

Masz już całość w Data owszem trzeba zliczyć ilość wierszy aby przydzielić pamięć dla playlist.
Ale dalej playlist może spokojnie wskazywać na fragmenty tego Data nie musisz liczyć max (który i tak liczy się nie poprawnie) nie musisz dodatkowo przydzielać pamięć na każdy wiersz.

0
    playlist = new char*[lines];

proponuję używać gotowych kontenerów:

vector<string> playlist;

1 użytkowników online, w tym zalogowanych: 0, gości: 1