Форум программистов, компьютерный форум CyberForum.ru

Надо применять delete [] или нет - C++

Восстановить пароль Регистрация
 
Hugra
 Аватар для Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
03.08.2013, 19:01     Надо применять delete [] или нет #1
Привет.
Читаю книгу Прата и выполняю задания.
Гл.8 Зд.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
60
61
62
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <cstring> //для strlen(), strcpy()
 
struct stringy
{
    char * str; //указатель на строку
    int ct; //длина строки не считая '\0'
};
 
void set(stringy & stry, const char * str);
void show(const stringy &, int cnt = 1);
void show(const char *, int cnt = 1);
int main()
{
    system("chcp 1251");
 
    stringy beany;
    char testing[] = "Reality isn't what it used to be.";
    set(beany,testing); //первым аргументом является ссылка
    //Выделяет пространство для хранения копии testing
    //использует элемент типа str структуры beany как указатель
    //на новый блок, копирует testing в новый блок и
    //создает элемент ct структуры beany
    show(beany); //выводит строковый член структуры один раз
    show(beany,2); //выводит строковый член структуры два раза
    testing[0] = 'D';
    testing[1] = 'u';
    show(testing); //выводит строку testing один раз
    show(testing,3); //выводит строку testing три раза
    show("Done!\n");
 
    delete [] beany.str;
 
    system("PAUSE");
    return 0;
}
 
void set(stringy & stry, const char * str)
{
    stry.ct = strlen(str);
    stry.str = new char[stry.ct+1];
    strcpy(stry.str, str);
 
}
void show(const stringy & stry, int i)
{
    while(i>0)
    {
        cout << stry.str << endl;
        --i;
    }
}
void show(const char * str,int i)
{
    while(i>0)
    {
        cout << str << endl;
        --i;
    }
}
Решение нашел в инете:
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
// pe8-4.cpp
#include <iostream>
#include <cstring>    // for strlen(), strcpy()
using namespace std;
 
struct stringy {
    char * str;        // points to a string
    int ct;        // length of string (not counting '\0')
    };
 
 
void show(const char *str, int cnt =  1);
void show(const stringy & bny, int cnt = 1);
void set(stringy & bny, const char * str);
 
int main(void)
{
    stringy beany;
    char testing[] = "Reality isn't what it used to be.";
 
    set(beany, testing);    // first argument is a reference,
            // allocates space to hold copy of testing,
            // sets str member of beany to point to the
            // new block, copies testing to new block,
            // and sets ct member of beany
    show(beany);        // prints member string once
    show(beany, 2);    // prints member string twice
    testing[0] = 'D';
    testing[1] = 'u';
    show(testing);    // prints testing string once
    show(testing, 3);    // prints testing string thrice
    show("Done!");
    return 0;
}
 
void show(const char *str, int cnt)
{
    while(cnt-- > 0)
    {
            cout << str << endl;
    }
}
 
void show(const stringy & bny, int cnt)
{
    while(cnt-- > 0)
    {
            cout << bny.str << endl;
    }
}
 
void set(stringy & bny, const char * str)
{
    bny.ct = strlen(str);
    bny.str = new char[bny.ct+1];
    strcpy(bny.str, str);
}
В функции set() выделяется динамически память, я своем примере удалил выделенную память после использования, в другом решении, удаления не было. Как правильно делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 26.12.2012
Сообщений: 382
03.08.2013, 19:11     Надо применять delete [] или нет #2
У вас правильно, а автор в интернете забил на освобождение памяти.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.08.2013, 19:35     Надо применять delete [] или нет #3
Цитата Сообщение от Hugra Посмотреть сообщение
Как правильно делать?
То что выделено через new, должно быть освобождено через delete.
Даниил
67 / 40 / 7
Регистрация: 14.05.2013
Сообщений: 383
03.08.2013, 20:56     Надо применять delete [] или нет #4
Вы б хоть задачу для приличия написали, а то не у каждого ведь эта книга есть..
Yandex
Объявления
03.08.2013, 20:56     Надо применять delete [] или нет
Ответ Создать тему
Опции темы

Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru