Я работаю с преподавателем по одному из моих заданий, и внутри они использовали меня malloc. Мой инструктор говорит, что вместо этого я должен использовать новые. Чтобы перейти между ними, я хочу убедиться, что делаю это правильно.Переход от malloc к новому
Что я имел (пару примеров);
char* songTitle = (char*)malloc(sizeof(char)* 50);
songTitle = (char*)malloc(sizeof(char)* 50);
title = (char*)malloc(sizeof(char)* 50);
Что я надеюсь на правильность перевода;
char* songTitle = new char[50];
songTitle = new char[50];
title = new char [50];
Пример фрагментов того, что я использую;
Отрывок # 1
cin.ignore();
cout << "What is the title of the song? " << endl;
char* songTitle = (char*)malloc(sizeof(char)* 50);
cin.getline(songTitle, 50);
songTitle[0] = std::toupper(songTitle[0]);
for (std::size_t i = 1; i < strlen(songTitle); ++i)
songTitle[i] = std::tolower(songTitle[i]);
Отрывок # 2
cin.ignore();
cout << "What is the title of the song? " << endl;
songTitle = (char*)malloc(sizeof(char)* 50);
cin.getline(songTitle, 50);
songTitle[0] = std::toupper(songTitle[0]);
Отрывок # 3
while (true && count < ARRAY_SIZE)
{
title = (char*)malloc(sizeof(char)* 50);
artist = (char*)malloc(sizeof(char)* 50);
duration = (char*)malloc(sizeof(char)* 50);
album = (char*)malloc(sizeof(char)* 50);
inFile.getline(title, 50, '\|');
songs[count].setTitle(title);
inFile.getline(artist, 50, '\|');
songs[count].setArtist(artist);
inFile.getline(duration, 50, '\|');
songs[count].setDuration(duration);
inFile.getline(album, 50, '\|');
songs[count].setAlbum(album);
if (inFile.eof() == true)
break;
count++;
}
Предполагая, что все переменные имеют тип 'char *', и вы добавляете точки с запятой, да, это выглядит правильно. – Adam
Действительно, вам следует перейти непосредственно к использованию 'std :: string', а не использовать' char * 'с' new'. Это устраняет проблемы с утечкой памяти почти автоматически - хорошо, если вы немного осторожны. Использование 'new' - это низкоуровневое программирование, которого обычно следует избегать. Предполагая, что за инициализацией 'songTitle' не следует присвоение' songTitle', вы более или менее корректны, хотя и негерметичны. Вам нужно решить, где освободится память. Инициализация и назначение окончательно утечки памяти, если нет 'delete [] songTitle;' между двумя операциями. –
'if (inFile.eof() == true)' должно быть 'if (! InFile)' –