@chaturanga

Почему не возникает ошибка при вводе слова больше длины чем выделена память?

#include <iostream>
using namespace std;

struct Word
{
    int id;
    char* letters;
};

struct InputWords
{
    int nWords;
    int maxWordSize;
    Word* words;
};

void clearInput(InputWords in)
{
    for (int i = 0; i < in.nWords; i++)
    {
        delete[] new Word[in.nWords];
    }
    delete[] in.words;
}

int main()
{
    int maxLen = 0;
    int currLen = 0;
    int iOper = 0;
    InputWords in;

    int iCountWordSym = 0;

    cout << "max word size: ";
    cin >> in.maxWordSize;
    cout << "count words: ";
    cin >> in.nWords;

    in.words = new Word[in.nWords];

    for (int i = 0; i < in.nWords; i++)
    {
        in.words[i].letters = new char[in.maxWordSize];
        cin >> in.words[i].letters;
    }

    for (int i = 0; i < in.nWords; i++)
    {
        cout << in.words[i].letters << endl;
    }
    clearInput(in);
}


Насколько понимаю
in.words[i].letters = new char[in.maxWordSize];
выделит память для слова размером in.maxWordSize и если ввести слово большей длины,
cin >> in.words[i].letters;
то должна возникнуть ошибка, но по факту её не возникает.

Пример:
max word size: 3
count words: 2
qwerty asdfghj
qwerty
asdfghj

Почему?
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
должна возникнуть ошибка, но по факту её не возникает.

А ты собери свою программу с санитайзером памяти (-fsanitize=address) и будет тебе ошибка.
Обращение к памяти за пределами выделенных массивов -- это UB, отсутствие видимого эффекта -- допустимый вариант поведения при UB.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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