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

У меня есть функция, которая возвращает указатель на массив символов. Вот она:

char* GetPasport()
{
    while (1>0)
    {
        cout << "Введите паспортные данные: ";
        char pasp[12];
        cin.getline(pasp, 12);
        if (isdigit(pasp[0]) && isdigit(pasp[1]) && isdigit(pasp[2]) && isdigit(pasp[3]) && pasp[4] == '-' &&
            isdigit(pasp[5]) && isdigit(pasp[6]) && isdigit(pasp[7]) && isdigit(pasp[8]) && isdigit(pasp[9]) && isdigit(pasp[10]))
        {
            return pasp;
        }
        else
        {
            cin.clear(); 
            if (size(pasp) ==11)
            {
                cin.ignore(1000, '\n');
            }
            cout <<endl<< "Паспортные данные были введены некорректно." << endl;
            cout << "Формат ввода паспортных данных: ****-******" << endl;
        }
    }   
}

в функции main() я создаю указатель на массив char и присваиваю его функции GetPasport()

char* pasp = new char;
    pasp= GetPasport();
    cout << pasp;

При попытке вывода, программа выводит непонятные символы. Пытался прогнать программу через отладчик по шагам. Выходит вот так. Сначала все хорошо, указателю pasp присваивается верное значение, но уже через строчку значение произвольно меняется. Проблему найти не могу. Вот картинка для пояснения: введите сюда описание изображения


Ответы (2 шт):

Автор решения: Harry

[С тяжким вздохом, монотонно]

Возврат указателя на локальную переменную, которая при выходе из функции уничтожается... Undefined behaviour, то бишь неопределенное поведение.

Добавим сюда утечку памяти:

char* pasp = new char;
pasp= GetPasport();

Ну и последнее - отключенные предупреждения компилятора, потому что при включенных он обо всем этом (ну, кроме утечки памяти) должен предупреждать...

Если ну очень хочется именно так - объявите pasp как static:

static char pasp[12];

Это увеличит время ее существования до всего времени работы программы.

→ Ссылка
Автор решения: ТарасПрогер

У вас битый(висящий) указатель. Переместите char pasp[12]; в глобальную область или прибавьте к массиву static, таким образом Вы продлите время жизни(2 вариант предпочтительней). Также не забывайте про delete[].

→ Ссылка