Распределенная динамическая память всегда удаляется?

Я не понимаю, у меня есть оператор switch, который предлагает пользователям создавать динамически выделенную память, отображать все списки и, наконец, удалять их (случай 3, который напечатан ниже.)

Когда я выбираю случай 3 в программе и ввожу что-либо, кроме "y" или "Y", он все равно удаляет список, и я не понимаю, почему...

Если кто-то может помочь мне здесь, я был бы очень признателен, что:

    case 3:
        cout << "Which list did you want to delete?" << endl
            << "List: ";
        cin >> i;
        i--;
        if (dynArray[i] == NULL){
            noListExist();
            break;
        }
        else
            printoutAllLists(dynArray[i], arraySize[i], i);
            cout << "Are you sure? ('y' or 'n'):" << endl
                << "Confirm: ";
            cin >> j;
            if (j == 'y' || 'Y'){
                delete[] dynArray[i];
                dynArray[i] = NULL;

            }
            else
                break;

        break;

2 ответа

Решение

Вам также нужно {...} после первого else, чтобы определить экстент оператора else. В вашем нынешнем утверждении else есть только одна строка.

if (j == 'y' || 'Y') 

всегда верно, так как правая часть || т.е. 'Y' ненулевой, который оценивается, когда j не равно 'y'

Используйте:

if (j == 'y' || j== 'Y')

Там может быть еще несколько ошибок, и шансы утечки памяти тоже

Другие вопросы по тегам