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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Firework
63 / 87 / 23
Регистрация: 01.04.2013
Сообщений: 593
#1

Несколько new на один и тот же указатель - C++

29.09.2015, 14:42. Просмотров 261. Ответов 6
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
char* p;
p = new char[5];
strcpy(p, "june");
cout << p << endl;
p = new char[7];
strcpy(p, "august");
cout << p << endl;
p = new char[4];
strcpy(p, "may");
cout << p << endl;
В MSVS 2010 работает. Насколько этот код безопасный? Или же лучше писать delete p перед новым new.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2015, 14:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Несколько new на один и тот же указатель (C++):

Как использовать один и тот же case в switch несколько раз? - C++
Как использовать один и тот же case в switch несколько раз?

Один и тот же объект в одном выражении модифицируется несколько раз - неопределенное поведение - C++
Уважаемые форумчане! Недавно столкнулся с интересным на мой взгляд необычным поведением компилятора c++ от keil. Определил класс шаблон...

Генератор паролей создает один и тот же пароль - C++
Собственно вопрос, почему он генерирует одно и тоже каждый раз? const int length = 10; // длина пароля. char chars = {...

Чтение и запись в один и тот же файл с CreateFile - C++
Добрый день. необходимо, чтобы можно было открыть файл, произвести из него чтение, и в процессе считывания при необходимости вносить...

Два потока читают один и тот же буфер - C++
void priem(char * g) { for (;;Sleep(500)) { printf(&quot;%s\n&quot;, g); } } int main() {

Определить, сколько занятий ведет один и тот де преподаватель - C++
В расписании шесть строк, в каждой из которых описан предмет, преподаватель, номер группы, день недели, часы занятия, аудитория....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
29.09.2015, 15:18 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Firework Посмотреть сообщение
Или же лучше писать delete p перед новым new.
Обязательно писать. Иначе происходит "утечка памяти"

Добавлено через 29 минут
Firework. По этой причине, в С++ проще использовать std::string

C++
1
2
3
4
5
6
7
  std::string s;
  s = "one";
  std::cout << s << std::endl;
  s = "two";
  std::cout << s << std::endl;
  s = "three";
  std::cout << s << std::endl;
Firework
63 / 87 / 23
Регистрация: 01.04.2013
Сообщений: 593
29.09.2015, 16:22  [ТС] #3
Цитата Сообщение от AlexVRud Посмотреть сообщение
По этой причине, в С++ проще использовать std::string
Ну это понятно. Я не новичок. Просто если бы можно было использовать библиотеки (в том числе std), то моя задача решалась бы в 2 счёта. Ну может быть в 3 счёта.

Добавлено через 21 минуту
Точно убедился
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int* p;
    p = new int[5];
    for (int i = 0; i < 5; ++i)
        p[i] = i * 2;
    cout << p << endl;
    p = new int[7];
    for (int i = 0; i < 7; ++i)
        p[i] = i * 3;
    cout << p << endl;
    p = new int[4];
    for (int i = 0; i < 4; ++i)
        p[i] = i * 4;
    cout << p << endl;
Разные значения указателя.
А вот процесс, выполняющий этот код
C++
1
2
3
4
char *pointer = NULL;
    for( unsigned long long int i = 0; i < 1024 * 1024; i++ ) {
        pointer = new char[1024];
    }
как раз жрёт гиг оперативки. А если код такой
C++
1
2
3
4
for( unsigned long long int i = 0; i < 1024 * 1024; i++ ) {
        pointer = new char[1024];
        delete pointer;
    }
то меньше мегабайта.
Ника))
41 / 41 / 8
Регистрация: 08.12.2010
Сообщений: 339
29.09.2015, 16:32 #4
Не понял где связь , ты используешь потоковый вывод cout и говоришь , что тебе запрещено использовать std. В чем логика?
Для справки: видимо на том , на чем ты пишешь свой код подключение STD прописано изначально , к примеру "c++debugger".
AlexVRud
442 / 152 / 38
Регистрация: 04.07.2014
Сообщений: 431
29.09.2015, 17:14 #5
Цитата Сообщение от Firework Посмотреть сообщение
Просто если бы можно было использовать библиотеки (в том числе std),
Чем использование стандартной библиотеки Си, будет отличаться от стандартной библиотеки С++.
Ты уже используешь С++, а линковать дополнительные библиотеки для string/vector/shared_ptr/... НЕ НАДО. Они уже все предоставлены (если только не идёт речь о специфичной железке). Если вопрос стоит в взаимодействии с Си-библиотеками, то эти классы имеют все методы для работы с "обычными массивами-ссылками".

С другой стороны в С++ хорошим тоном является перемещение new/delete в конструкторы/деструкторы классов (а это и реализовано в string/vector/shared_ptr/...).

Для примера, реализуй MP1 из https://courses.engr.illinois.edu/cs241/fa2012/, а потом прогони valgrind на получившемся коде. По моей практике, только один студен из группы не допустит утечки памяти.
daslex
29.09.2015, 17:26
  #6

Не по теме:

Список сам собой напрашивается.

Firework
63 / 87 / 23
Регистрация: 01.04.2013
Сообщений: 593
29.09.2015, 17:55  [ТС] #7
Цитата Сообщение от Ника)) Посмотреть сообщение
Не понял где связь , ты используешь потоковый вывод cout и говоришь , что тебе запрещено использовать std.
Контейнеры нельзя использовать (vector, string, list)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2015, 17:55
Привет! Вот еще темы с ответами:

Определить, сколько занятий ведет один и тот же преподаватель - C++
В расписании шесть строк, в каждой из которых описан предмет, преподаватель, номер группы, день недели, часы занятия, аудитория....

Возвращает один и тот же результат. Найти произведение ряда - C++
Нужно подсчитать: \prod_{k=1}^{n} \frac{{(1-x)}^{k+1}+1}{{((k-1)!+1)}^{2}} Написал программу, но проблема в том, что она выводит...

Двоичный поиск в массиве выдает один и тот же ответ - C++
выдаёт один и тот же ответ(( #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; int binarySearch(int , int, int, int,...

Как использовать один и тот же объект в разных классах? - C++
Подскажите, пожалуйста, как получить доступ к функции через объект. Второй день бьюсь, хотя решение должно быть простое В классе A...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.09.2015, 17:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru