У меня есть рабочий код для функции, которая принимает символ и число и формирует строку, дублируя этот символ столько раз. Вот часть, которая прекрасно работает.Запрос инкремента указателя на C++
char * buildstr(char c, int n)
{
char * pc = new char[n+1];
for (int i = 0; i < n; ++i)
{
*(pc+i) = c;
}
*(pc+n) = '\0';
return pc;
}
Но если я использую другую логику, где я непосредственно увеличиваем сам указатель непосредственно после этого я получаю ошибку, когда я освободить память в основной функции с помощью удаления [].
Что может быть моей проблемой?
Спасибо,
char * buildstr(char c, int n)
{
char * pc = new char[n+1];
for (int i = 0; i < n; ++i)
{
*pc = c;
pc++;
}
*(pc) = '\0';
return pc;
}
Вы возвращаете инкрементный указатель, а не тот, который возвращается из распределения. Кроме того, вместо выражений типа '* (pc + i)' вы должны использовать эквивалентный и более читаемый 'pc [i]'. –
Это не должно быть помечено как C, это явно C++. – unwind
Обратите внимание, что нет необходимости писать такую функцию в C++ (за исключением, возможно, для обучения), поскольку 'std :: string' [имеет конструктор (см. (2))] (http: //en.cppreference.com/w/cpp/string/basic_string/basic_string), который делает именно это (и еще один большой плюс: он управляет памятью для вас). –