0 / 0 / 0
Регистрация: 01.02.2019
Сообщений: 36
1

почему здесь в коде из книги при значении равном NULL не удаляется указатель на динамическую память?

09.03.2019, 23:44. Показов 353. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
using namespace std;
 
class MyString
{
private:
public:
    char* Buffer;
 
 
    // Constructor
    MyString(const char* InitialInput)
    {
        if (InitialInput != NULL)
        {
            Buffer = new char[strlen(InitialInput) + 1];
            strcpy(Buffer, InitialInput);
        }
        else
            Buffer = NULL;
    }
 
    // Destructor
    ~MyString()
    {
        cout << "Invoking destructor, clearing up" << endl;
        if (Buffer != NULL) //не удаляется указатель? если NULL
            delete[] Buffer;
    }
 
    int GetLength()
    {
        return strlen(Buffer);
    }
 
    const char* GetString()
    {
        return Buffer;
    }
};
 
void UseMyString(MyString Input)
{
    cout << "String buffer in MyString is " << Input.GetLength();
    cout << " characters long" << endl;
 
    cout << "Buffer contains: " << Input.GetString() << endl;
    return;
}
 
int main()
{
    MyString SayHello(NULL);
 
    // Pass SayHello as a parameter to the function
    
 
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2019, 23:44
Ответы с готовыми решениями:

Вывод повторения ввода при отрицательном значении n или равном единице
Требуется вывести через цикл do while или while два варианта: расчет переменной n, при значении...

Определите результат работы функции входном значении, равном 123456
Определите результат работы функции входном значении, равном 123456: function qq(x:...

Почему delete не устанавливает автоматически указатель в NULL?
Почему delete не устанавливает автоматически указатель в NULL?

Игнорировать параметры в запросе при значении Null
Всем доброго времени суток. Возник такой вопрос. Готовлю запрос для репортса. В запросе есть...

4
Mental handicap
1245 / 623 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
09.03.2019, 23:45 2
Цитата Сообщение от john_connorT100 Посмотреть сообщение
C++
1
if (Buffer != NULL) //не удаляется указатель? если NULL
Потому что здесь стоит такое условие.
0
330 / 145 / 56
Регистрация: 17.10.2015
Сообщений: 580
09.03.2019, 23:53 3
Потому, что идёт проверка, указывает ли он на какие-то данные. Если указывает - имеет смысл очистить то, что получилось в результате работы программы, иначе мы можем получить неопределённое поведение, если попытаемся очистить невыделенную память (то, чего нет на самом деле).
И не указатель мы удаляем, а освобождаем память, выделенную под массив (обратите внимание на квадратные скобочки возле оператора delete)
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
10.03.2019, 00:35 4
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
Потому, что идёт проверка, указывает ли он на какие-то данные.
Идёт проверка (лишняя): указывает ли он на NULL. Лишняя потому, что если указатель NULL, то delete игнорируется.

Добавлено через 1 минуту
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
иначе мы можем получить неопределённое поведение, если попытаемся очистить невыделенную память
А вот это, в коде данного деструктора, не проверяется.
0
Параллельный Кот
1904 / 826 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
10.03.2019, 00:39 5
Цитата Сообщение от Krokodil9798 Посмотреть сообщение
Потому, что идёт проверка, указывает ли он на какие-то данные. Если указывает - имеет смысл очистить то, что получилось в результате работы программы, иначе мы можем получить неопределённое поведение, если попытаемся очистить невыделенную память (то, чего нет на самом деле).
Do I need to check for null before delete p?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2019, 00:39
Помогаю со студенческими работами здесь

Почему при значении int j = 1 сортировка массива не работает, а при значении 0 работает?
Почему при значении int j = 1 сортировка массива не работает, а при значении 0 работает? Если я...

В массиве, при значении null, вывести пустую строку
Здравствуйте, пытаюсь в массиве при значении null вывести пустую строку, но так как знаний не...

Как сделать ссылку из БД (php my admin) при значении NULL?
Как сделать ссылку из БД при значении NULL? К примеру, в БД есть 2 столбца URL и NOMER...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Указатель при инициализации не равен NULL
Здравия желаю!:) myClass myClass::operator=(myClass iniOb) { char *temp; //Указатель на копию...

Расскажите, как здесь работает указатель на указатель?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale.h&gt; using namespace std; void main() {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru