Почему создается массив с мусором?

Изучаю динамическую память, выделяю память для массива символов, но в Debug видно, что выделяется больше, и при выводе получаются какие-то символы:

Код
char* resize(const char* str, unsigned int size, unsigned int new_size)
{
    char* ptr = new char[new_size];
    int min_size = new_size > size ? size : new_size;
    for (int i = 0; i < min_size; i++)
    {
        ptr[i] = str[i];
    }
    delete[] str;
    return ptr;
}


char* getline()
{
    char* line = new char[1];
    char simbol;
    unsigned int size = 1;
    while (cin.get(simbol) && simbol != '\n' && simbol != '\0')
    {
        line = resize(line, size, size + 1);
        line[size-1] = simbol;
        size++;
    }
    return line;
}


int main()
{
    char* line = getline();
    for (int i = 0; line[i] != '\0'; i++)
    {
        cout << line[i];
    }
    cout << endl;
    return 0;
}

При выделении памяти массиву
WA7ByNS.png

Результат в консоль
9a9vTwd.png
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Закрывающего нуля в конце строки нет. Поэтому вывод лезет за границу выделенной памяти, а там мусор.

И еще, очень глаз режет: правильно писать "symbol", а не "simbol".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы