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

Способы создания объектов и арифметика указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перестановки из n чисел http://www.cyberforum.ru/cpp-beginners/thread164939.html
Не получается написать функцию, которая сохраняет всевозможные перестановки из n элементов в двухмерный массив int arr, где len-число всевозможных перестановок. Как это можно реализовать?
C++ Объединение данных файлов-комментариев .srt Если кому не сложно, то напишите программку, которая объединяет данные у файлов-комментариев .srt. А конкретно объединяет перевод фразы одного и другого языка. Например film_ru.srt и film_en.srt имеет такое содержание 1 00:00:04,070 --> 00:00:05,904 "Привет и пока" и http://www.cyberforum.ru/cpp-beginners/thread164925.html
C++ Двунаправленный линейный список
Доброго времени суток! Я перевелся на 2ой курс в институте, где изучали С++, которого у меня не было. Поэтому спрашиваю вас - что такое двулинейный направленный список, как он реализуется (что нужно изучить, чтобы это сделать) и как с ним работать (добавлять, удалять, искать и т.д.)? Вообще задайте направление мыслей, а то непонятно что и как делать.
C++ Умножение матрицы на число
ну вобщем былбы примного благодарен еслиб помогли с такой вот задачкой: 2 3.1 7.5 11 1.7 1 0 7.4 5 дано: А= 4.5 10.7 , В= 5 4 2 , С= 7 8 , В= 9 8 7 1 5 6 K=B(A+C)+D Поможите люди добрые?=)
C++ как запустить visual c++ на win 7 http://www.cyberforum.ru/cpp-beginners/thread164903.html
Подскажите чайнику как запустить встроенный в win 7 visual c++, установленные компоненты есть Microsoft Visual C++2010 64 Redistributable а как запустить?
C++ Ошибка при компиляции Посмотрите пожалуйста в чем ошибка тут и что нужно исправить ? #include <iostream> int fac(int n) { int fac; int i; подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
11.09.2010, 10:58     Способы создания объектов и арифметика указателей
Неправильные у вас тут мысли. Первый живёт ровно до тех пор, пока его не удалят. Если его адрес потеряется, удалить его будет невозможно и он так и будет висеть в памяти мёртвым грузом, это называется утечкой памяти. Если его удалить, но сохранить адрес и потом им воспользоваться, это тоже очень неприятная ошибка.
Второй будет существовать в пределах области, в которой определён:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int* foo()
{
    int *a = new int(7);
    int b = 8;
    for(int c=0; c<9; ++c){
        int *d = new int(10);   // Этот указатель создаётся в начале каждого шага цикла
        std::cout << c;
        // В конце цикла указатель d уничтожается, замусорив память "осиротевшим" блоком, выделенным под объект int
    }   // После этой скобки пропадает переменная c, как и не было её
    return a;
}   // После этой скобки пропадает начисто b и указатель a, но его значение возвращается из функции
 
void bar()
{
    int *aa = foo();  // Адрес объекта, созданного в foo и хранящегося там в a, попадает в aa
    *aa = 5;           // Правильно
    delete aa;         // Уничтожаем созданный объект, освобождаем занятую память, при этом для объектов вызывается деструктор
    int *bb = foo(); // Создаётся ещё один объект
    *aa = *bb;       // aa уже удалён, это недопустимая смысловая ошибка, но компилятор её пропустит. Может вызывать сбой программы или порчу данных в произвольном месте.
}   // Указатели aa и bb уничтожены, но объект, на который указывал bb, остался в памяти мёртвым грузом
 
Текущее время: 14:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru