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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Подскажите справку по языку http://www.cyberforum.ru/cpp-beginners/thread933026.html
Доброго дня! Простите, если я баран и спрашиваю банальные вещи или наборот несуществующие. Есть ли такой электроный справочник, что б я вписал туда любой элемент программы и он мне оп- развёрнутае обьяснение?
C++ Сортировать одномерный массив вещественных чисел Помогите написать функцию, кто знает! Условие: допускается использование любых видов функций. Разработать функцию, которая осуществляет сортировку одномерного массива вещественных чисел в порядке возрастания значений элементов. На основе разработанной функции отсортировать по возрастанию значений элементы каждой строки матрицы действительных чисел. http://www.cyberforum.ru/cpp-beginners/thread933009.html
C++ Удалить из предложения слова с комбинацией символов
Помогите написать функцию! Условие: допускается использование любых видов функций. Разработать функцию, которая удаляет из предложения все слова, содержащие заданную комбинацию символов. Ввести буквосочетание. На основе разработанной функции изъять из введенного предложения все слова, содержащие это буквосочетание. Распечатать результат.
C++ Сформировать словесную запись числа
Помогите с функцией! Условие: допускается использование любых видов функций. Разработать функцию, которая формирует string, что является словесной записью (числительным) заданного двузначного числа. Сгенерировать последовательность из 14-и случайных двузначных чисел. Используя разработанную функцию, напечатать таблицу значений этих чисел и их словесных записей.
C++ Удаление из вектора нескольких объектов http://www.cyberforum.ru/cpp-beginners/thread933004.html
Собственно как удалить несколько объектов из вектора, имея индексы/итераторы, ведь при удалении первого объекта придется пройтись по всем индексам и отнять 1, а затем потоврить снова и снова, и снова/все остальные итераторы перестанут быть действительными
C++ Определить первое слово с указанной буквой Помогите написать функцию, пожалуйста! Условие: допускается использование любых видов функций. Разработать функцию, которая определяет в заданной символьной строке первое слово, содержащее указанную букву и возвращает указатель на конец этого слова. Используя разработанную функцию, выделить и напечатать все слова из введенного предложения, в которых встречается заданная буква, или вывести... подробнее

Показать сообщение отдельно
Hugra
 Аватар для Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
03.08.2013, 19:01     Надо применять delete [] или нет
Привет.
Читаю книгу Прата и выполняю задания.
Гл.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() выделяется динамически память, я своем примере удалил выделенную память после использования, в другом решении, удаления не было. Как правильно делать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru