Итак, у меня есть три структуры с функциями, которые можно использовать вместе с ними ...
struct Song{
std::string songTitle;
std::string songLength;
};
Song* createSong(string title, string length);
void displaySong(Song* s);
void destroySong(Song* s);
struct CD{
std::string cdArtist;
std::string cdTitle;
int cdYear;
int cdRate;
int cdNumSongs;
Song** songs;
};
CD* createCD(std::string artist, std::string title, int year, int rate, int numSongs);
void displayCD(CD* c);
void destroyCD(CD* c);
void addSong(CD* cd, std::string title, std::string length);
struct CDs{
CD** cdArray;
int cdMaxSize=1000;
int cdCurrentSize=0;
};
CDs* createCDs (const char* filename);
void displayCDs (CDs* c);
void destoryCDs (CDs* c);
Я создал и протестировал функции struct Song, а также функции struct CD. Однако у меня возникли проблемы с реализацией компакт-дисков * createCD (const char * filename), которые извлекают данные из файла и создают динамически сохраняемый массив из этих компакт-дисков.
Пока это мой код, я проверил наличие висячих указателей, и когда мой код компилируется, он отлично работает. Это только когда бежит, он останавливается на несколько секунд и выходит. Чтение данных из текстового файла также было проверено, и эта часть работает сама по себе.
Код до сих пор ...
CDs* createCDs(const char* filename){
CDs* cds = new CDs;
ifstream inFile(filename);
CD* tempcd;
CD** tempcdArray = new CD*[cds->cdCurrentSize];
CD** tempcdNewArray;
string tempArtist, tempTitle, tempSongTitle, tempSongLength;
int tempYear, tempRate, tempNumSongs;
while(getline(inFile, tempTitle)){ // WHEN IT GRABS NOTHING
cds->cdMaxSize++;
tempcdNewArray = new CD*[cds->cdMaxSize];
for(int i=0; i<cds->cdCurrentSize; i++){
tempcdNewArray[i] = tempcdArray[i];
delete[] tempcdArray;
}
getline(inFile, tempArtist);
inFile>>tempYear;
inFile>>tempRate;
inFile>>tempNumSongs;
inFile.ignore();
tempcd = createCD(tempArtist, tempTitle, tempYear, tempRate, tempNumSongs);
for(int i=0; i<tempNumSongs; i++){
getline(inFile, tempSongLength, ',');
getline(inFile, tempSongTitle);
addSong(tempcd, tempSongTitle, tempSongLength);
}
tempcdNewArray[cds->cdCurrentSize] = tempcd;
tempcdArray = new CD*[cds->cdMaxSize];
for(int i=0; i<cds->cdMaxSize; i++){
tempcdArray[i] = tempcdNewArray[i];
delete tempcdNewArray;
}
delete[] tempcd;
cds->cdCurrentSize++;
}
for(int i=0; i<cds->cdCurrentSize; i++){
cds->cdArray[i] = tempcdArray[i];
}
inFile.close();
return cds;
}
В случае, если вам нужно знать,
Один компакт-диск в макете текстового файла ..
Eternal Tears of Sorrow (cd title)
Saivon Lapsi (cd artist)
2013 (cd year)
7 (cd rating)
13 (number of songs)
1:10,Saivo (length, title)
... (other songs after here)
Я попытался отследить свой код для висячих указателей, я убедился, что «новые» все разделы памяти, которые я возвращаю ... и т. Д. И т. Д.