Ответы пользователя по тегу C++
  • Управление памятью в С++?

    Давай попробуем разобраться, что у тебя написано:

    int a = 3; // объявляем переменную типа int
    int *p = 0; // объявляем указатель
    p = &a; // записываем в указатель адрес переменной а

    А теперь я предлагаю тебе прописать вот такие простые строчки, чтобы посмотреть что у тебя там всё таки хранится:

    cout << "Значение a=" << a << endl; //значение a
    cout << "Адрес &a=" << &a << endl; //здесь адрес а
    cout << "Значение p=" << p << endl; //здесь адрес а

    В твоем примере удалять ничего не нужно, это даже вызовет ошибку при компиляции, так как оператор delete используется в том случае, если память выделяешь ты динамически, используя ключевое слово new.

    в твоем случае

    int a = 3 // ты в памяти выделил 4 байта;
    int *p = ты выделил (4 или 8 байта, на хранения адреса a, в зависимости от того, какая у тебя система 32-х или 64-х разрядная.

    если ты объявляешь
    int *p = new int //ты в динамической памяти выделяешь размер для хранения int
    delete p //освобождаешь занятую ячейку в памяти.

    Я сам новичок, и то что я тут написал, это моё понимание, очень хотел бы чтобы меня поправили.
    Ответ написан
    Комментировать
  • Как очистить указатель - C++?

    @OnlyBooid Автор вопроса
    Therapyx Спасибо большое! В ходе своих экспериментов я пришел к данному решению.

    void oneCell {
        double **p = new double*; // динамическое выделение памяти под указатель  double
        double value = 2;
        double *index = new double; // динамическое выделение памяти под объект типа double
        index = &value; // Передаем указателю адрес переменной value; 
        p = &index; // передаем указателю адрес указателя index;
        cout << "Адрес value:                       " << &value << "\n";
        cout << "В index хранится адрес value:      " << index << "\n";
        cout << "Адрес index:                       " << &index << "\n";
        cout << "В p хранится адрес index:          " << p << "\n";
        cout << "В *p хранится значение index:      " << *p << "\n";
        cout << "В **p хранится значение value:     " << **p << "\n";
        p = new double*;
        index = new double;
        delete p;
        delete index; 
        return 0;
    }


    Осталось немного разобраться, почему именно так.
    P.s. буду учить английский, искал ответы на stackoverflow используя "index" как указатель( Указатель - pointer.

    при использовании:

    delete p;
    delete index;

    или

    delete *p;
    delete index;

    076bc1089e904402a55d4650642a884b.jpg
    Ответ написан