Четыре ошибки при работе с указателями в С++
Указатели — это одна из самых сложных и запутанных тем для начинающих программистов. Неправильное использование указателей может привести к серьёзным ошибкам: утечкам памяти и даже сбоям программ 😱.
Что такое указатель?
Указатель — это переменная, которая хранит адрес другой переменной в памяти. Использование указателей позволяет работать с динамической памятью, передавать большие объекты в функции без их копирования и создавать сложные структуры данных (например, связные списки и деревья).
Типовые ошибки при работе с указателями:
1. Использование неинициализированных указателей
Всегда инициализируйте указатель перед использованием!
2. Утечки памяти
Используйте delete для освобождения динамической памяти, чтобы не было утечек! Иначе со временем динамической памяти может не хватить.
3. Двойное освобождение памяти
Попытка дважды освободить одну и ту же область памяти приведет к неопределенному поведению программы. Поэтому обнуляйте указатель после освобождения памяти. Новое применение delete к такому указателю не вызовет проблем.
4. Неправильное использование указателей и массивов
Указатели позволяют ускорить работу с массивами, но только в том случае, когда они являются подвижными!
Указатели в C++ — мощный инструмент, но они требуют внимательного и ответственного подхода.
А я напоминаю, что еще три дня Вы еще можете начать изучать С++ по старой цене! Просто переходите по ссылкам и применяйте промокод FRIENDS:
• Основы программирования на C/C++. Полная версия
• Основы программирования на С/C++
• Основы программирования на С/C++. Часть 2.
Указатели — это одна из самых сложных и запутанных тем для начинающих программистов. Неправильное использование указателей может привести к серьёзным ошибкам: утечкам памяти и даже сбоям программ 😱.
Что такое указатель?
Указатель — это переменная, которая хранит адрес другой переменной в памяти. Использование указателей позволяет работать с динамической памятью, передавать большие объекты в функции без их копирования и создавать сложные структуры данных (например, связные списки и деревья).
Типовые ошибки при работе с указателями:
1. Использование неинициализированных указателей
int* ptr;
*ptr = 5; //присваиваем значение указателю "в никуда"
Всегда инициализируйте указатель перед использованием!
int k = 8; //обычная переменная
int* ptr = &k; //присваиваем указателю адрес k
*ptr = 5; //значение 5 записывается в переменную k
2. Утечки памяти
Используйте delete для освобождения динамической памяти, чтобы не было утечек! Иначе со временем динамической памяти может не хватить.
int* ptr = new int(10); //выделение и инициализация динамической памяти
//использование памяти
delete ptr; //освобождение памяти
3. Двойное освобождение памяти
Попытка дважды освободить одну и ту же область памяти приведет к неопределенному поведению программы. Поэтому обнуляйте указатель после освобождения памяти. Новое применение delete к такому указателю не вызовет проблем.
int* ptr = new int(10); //выделение и инициализация динамической памяти
//использование памяти
delete ptr; //освобождение памяти
ptr = nullptr; //предотвращает двойное освобождение
4. Неправильное использование указателей и массивов
Указатели позволяют ускорить работу с массивами, но только в том случае, когда они являются подвижными!
int arr[4] = {5,7,8,9};
int* ptr = arr; //ставим указатель на начало массива
for (int i = 0; i < 4; i++) {
cout << *(ptr + i) << " "; //не быcтрее, чем arr[i]
}
for (int i = 0; i < 4; i++, ptr++) { //продвигаем указатель
cout << *ptr << " "; //так быстрее!
}
Указатели в C++ — мощный инструмент, но они требуют внимательного и ответственного подхода.
А я напоминаю, что еще три дня Вы еще можете начать изучать С++ по старой цене! Просто переходите по ссылкам и применяйте промокод FRIENDS:
• Основы программирования на C/C++. Полная версия
• Основы программирования на С/C++
• Основы программирования на С/C++. Часть 2.
Stepik: online education
Основы программирования на C/C++ Полная версия
Программа для обучения программированию с нуля. Последовательно, просто, кратко. На интересных, не типовых задачах. В основе язык С/C++. Сформируем основы: понятие типов данных, конструирование кода, базовые алгоритмы, функции. Начните с С++, и Вы легко перейдете…
🔥5👍4
Приближается День Знаний! Для меня это праздник со слезами на глазах… Почему со слезами - преподаватели поймут!😉
Это день надежд и новых планов для учеников и студентов. И я хочу поддержать Вас в этом! Объявляю свою собственную мини-распродажу курсов! С 27.08 по 7.09 на все мои курсы скидка 25%. Переходите по ссылкам и включайтесь в интенсивную учебу сразу на старте!
Основы программирования на С/C++. Полная версия
Основы программирования на C/C++
Основы программирования на C/C++. Часть 2
Объектно-ориентированное программирование на Java
Это день надежд и новых планов для учеников и студентов. И я хочу поддержать Вас в этом! Объявляю свою собственную мини-распродажу курсов! С 27.08 по 7.09 на все мои курсы скидка 25%. Переходите по ссылкам и включайтесь в интенсивную учебу сразу на старте!
Основы программирования на С/C++. Полная версия
Основы программирования на C/C++
Основы программирования на C/C++. Часть 2
Объектно-ориентированное программирование на Java
🔥17
Хочу поделиться свежими отзывами на курс "Основы программирования на C/C++". Спасибо всем, кто оценил курс! Для меня это важная мотивация моей работы...😊
★★★★★
Замечательный курс, понятная и качественная подача материала. Если вас пугает С/С++ или просто программирование и вы не знаете, как начать, то это отличный вариант.
Feofnan позавчера
★★★★★
Очень много интересной практики, достойная теория, последние задачи с массивами очень разнообразные и интересные, новички, держитесь)). На первом курсе универа изучал криво-косо C++. Решил переучиться в более спокойной и удобной обстановке. Покупал вместе со 2-ой частью, лечу изучать!
Артем Осколков 13 дней назад
★★★★★
Прошла курс до конца и иду на вторую часть! Ранее пробовала проходить бесплатный курс по С/С++, но там была скупая информация, которая в "одно ухо влетает, из другого вылетает". Здесь же методично, шаг за шагом происходит обучение. Мало тестов, много задачек, задачи решаемые, рука набивается в процессе обучения. Автор курса отвечает на вопросы. И очень понравилась подача материала, чувствуется большой преподавательский опыт у автора курса.
Юлия 22 дня назад
★★★★★
Замечательный курс, понятная и качественная подача материала. Если вас пугает С/С++ или просто программирование и вы не знаете, как начать, то это отличный вариант.
Feofnan позавчера
★★★★★
Очень много интересной практики, достойная теория, последние задачи с массивами очень разнообразные и интересные, новички, держитесь)). На первом курсе универа изучал криво-косо C++. Решил переучиться в более спокойной и удобной обстановке. Покупал вместе со 2-ой частью, лечу изучать!
Артем Осколков 13 дней назад
★★★★★
Прошла курс до конца и иду на вторую часть! Ранее пробовала проходить бесплатный курс по С/С++, но там была скупая информация, которая в "одно ухо влетает, из другого вылетает". Здесь же методично, шаг за шагом происходит обучение. Мало тестов, много задачек, задачи решаемые, рука набивается в процессе обучения. Автор курса отвечает на вопросы. И очень понравилась подача материала, чувствуется большой преподавательский опыт у автора курса.
Юлия 22 дня назад
👍15🔥3
В сентябре Степику исполняется 11 лет. В честь этого события объявили конкурс кротких видео о любимом курсе. Обещают победителям подарить курсы и фирменный мерч Степика. Присоединяйтесь! Ссылка на конкурс: ВК конкурс
C++ или Java - что для Вас актуально сейчас? Я заметила, что большинство подписчиков здесь интересуются именно Java. Поэтому решила периодически публиковать короткие задачки для мотивации и проверки своих знаний! 🧐 И первая задача для тех, кто уже изучил тему "Наследование" в курсе "ООП на Java".
👍16❤1
Что будет выведено на экран?
Anonymous Quiz
3%
Исключение во время выполнения
76%
Child
12%
Ошибка компиляции
9%
Parent
👍2
Что выведет код?
Anonymous Quiz
10%
A
4%
B
14%
C
55%
Ошибка компиляции
17%
Исключение во время выполнения
Как учиться эффективно?
Я уже упоминала книги серии Head First, которые построены с учетом того, как функционирует наш мозг. В них есть ряд советов читателям/ученикам, которые я считаю весьма актуальными:
1) Не торопитесь. Чем больше вы поймете, тем меньше придется запоминать. Просто прочесть текст или посмотреть видео недостаточно. Представьте, что Вам нужно кому-то это объяснить. Лично я всегда объясняю тему своему коту. 😺 Если он понял – то можно переходить к студентам…
2) Выполняйте упражнения и решайте задачи. Обычно во время решения ты осознаешь свои пробелы. А со студентами почему-то это чаще всего случается на контрольной 😊 Старайтесь решать задачи самостоятельно. ChatGPT – прекрасный ресурс. Но лучше обратиться к нему после того, как ты “сваял” пусть кривое и костыльное, но СВОЕ решение. Поверьте, радость от своего “заработало!” никакой ChatGPT не заменит! 😁
3) Ограничьте получение информации перед сном. 😴 Часть обучения (особенно перенос информации в долгосрочную память) происходит после того, как вы прочли текст или посмотрели видео. Ваш мозг не сразу усваивает информацию. Поэтому если проходите урок перед сном – не смотрите и не читайте ничего другого! Простая информационная пауза поможет Вам больше, чем часы зубрежки!
4) Прислушивайтесь к своему мозгу. Следите за тем, когда ваш мозг начинает уставать. Если вы начинаете поверхностно воспринимать материал или забываете только что прочитанное, пора сделать перерыв. А также перерыв нужен, когда становится скучно. 🥱 На самом деле это не скука, а сигнал от Вашего мозга! Не стоит заниматься по десять часов в день! Один - два часа занятий, но на регулярной основе гораздо эффективнее.
5) Пейте воду. И побольше! 💧 Мозг лучше всего работает в условиях высокой влажности. Дегидратация (которая может насту¬пить еще до того, как вы почувствуете жажду) снижает когнитивные функции.
Я уже упоминала книги серии Head First, которые построены с учетом того, как функционирует наш мозг. В них есть ряд советов читателям/ученикам, которые я считаю весьма актуальными:
1) Не торопитесь. Чем больше вы поймете, тем меньше придется запоминать. Просто прочесть текст или посмотреть видео недостаточно. Представьте, что Вам нужно кому-то это объяснить. Лично я всегда объясняю тему своему коту. 😺 Если он понял – то можно переходить к студентам…
2) Выполняйте упражнения и решайте задачи. Обычно во время решения ты осознаешь свои пробелы. А со студентами почему-то это чаще всего случается на контрольной 😊 Старайтесь решать задачи самостоятельно. ChatGPT – прекрасный ресурс. Но лучше обратиться к нему после того, как ты “сваял” пусть кривое и костыльное, но СВОЕ решение. Поверьте, радость от своего “заработало!” никакой ChatGPT не заменит! 😁
3) Ограничьте получение информации перед сном. 😴 Часть обучения (особенно перенос информации в долгосрочную память) происходит после того, как вы прочли текст или посмотрели видео. Ваш мозг не сразу усваивает информацию. Поэтому если проходите урок перед сном – не смотрите и не читайте ничего другого! Простая информационная пауза поможет Вам больше, чем часы зубрежки!
4) Прислушивайтесь к своему мозгу. Следите за тем, когда ваш мозг начинает уставать. Если вы начинаете поверхностно воспринимать материал или забываете только что прочитанное, пора сделать перерыв. А также перерыв нужен, когда становится скучно. 🥱 На самом деле это не скука, а сигнал от Вашего мозга! Не стоит заниматься по десять часов в день! Один - два часа занятий, но на регулярной основе гораздо эффективнее.
5) Пейте воду. И побольше! 💧 Мозг лучше всего работает в условиях высокой влажности. Дегидратация (которая может насту¬пить еще до того, как вы почувствуете жажду) снижает когнитивные функции.
🔥21👍11❤8
Что выведет фрагмент кода?
Anonymous Quiz
47%
true
38%
false
11%
Ошибка компиляции
4%
RuntimeException
👍2
Наконец-то! Курс "Прокачай Jаva" уже опубликован!
Последнее время я совсем забросила этот канал, потому что усиленно работала над завершением этого проекта… И вот теперь хочу пригласить Вас стать первыми, кто сможет оценить, протестировать, покритиковать!
Для Вас максимальная скидка 40% от самой низкой цены. Действует до 25 ноября. Потом будет распродажа на Степике. Скидка тоже будет, но меньше.
В общем, жду Ваc, мои дорогие! И настраиваю свою книгу замечаний и предложений :) Для покупки курса переходите по ссылке:
https://stepik.org/a/193674/pay?promo=c97c0f2dd9957dee
Последнее время я совсем забросила этот канал, потому что усиленно работала над завершением этого проекта… И вот теперь хочу пригласить Вас стать первыми, кто сможет оценить, протестировать, покритиковать!
Для Вас максимальная скидка 40% от самой низкой цены. Действует до 25 ноября. Потом будет распродажа на Степике. Скидка тоже будет, но меньше.
В общем, жду Ваc, мои дорогие! И настраиваю свою книгу замечаний и предложений :) Для покупки курса переходите по ссылке:
https://stepik.org/a/193674/pay?promo=c97c0f2dd9957dee
Stepik: online education
Прокачай Java
Продвинутый курс по Java: потоки ввода-вывода, коллекции, многопоточность, даты и время, регулярные выражения, лямбда-выражения и Streams. Все, что Вы хотели узнать про Java и не стеснялись спрашивать...
👍32❤9🔥7
Курсы по Java для новичков pinned «Наконец-то! Курс "Прокачай Jаva" уже опубликован! Последнее время я совсем забросила этот канал, потому что усиленно работала над завершением этого проекта… И вот теперь хочу пригласить Вас стать первыми, кто сможет оценить, протестировать, покритиковать!…»
😱5
Должен ли быть вводный курс по Java более подробным?
Вот сегодня в отзывах прочла следующее:
Вообще-то я хотела сделать курс коротким. Но, возможно, перестаралась. Многие из Вас прошли курс “Основы языка Java”. Как Вы считаете, стоит ли его расширить и добавить подробностей и примеров?
Вот сегодня в отзывах прочла следующее:
Курс предполагает базовые знания С, у меня их не было, поэтому некоторые моменты мне были не сильно понятны сразу, хотелось бы чтобы такой замечательный вводный курс был чуть более подробным, если это возможно.
Вообще-то я хотела сделать курс коротким. Но, возможно, перестаралась. Многие из Вас прошли курс “Основы языка Java”. Как Вы считаете, стоит ли его расширить и добавить подробностей и примеров?
👍1
Стоит ли сделать курс "Основы язяка Java" более продробным?
Anonymous Poll
27%
Нет, это перегрузит курс и повредит мотивации его пройти!
73%
Да, чем подробнее для начинающих – тем лучше!
Завтра вечером скидки превратятся в тыкву!
Друзья! Напоминаю, что максимальная скидка на курс “Прокачай Java” действует до вечера 25.11.2024. Для покупки курса со скидкой 40% переходите по ссылке:
https://stepik.org/a/193674/pay?promo=c97c0f2dd9957dee
А с 26.11.2024 начинается Big Sale на Степике! На все мои курсы будет скидка 20%!
Друзья! Напоминаю, что максимальная скидка на курс “Прокачай Java” действует до вечера 25.11.2024. Для покупки курса со скидкой 40% переходите по ссылке:
https://stepik.org/a/193674/pay?promo=c97c0f2dd9957dee
А с 26.11.2024 начинается Big Sale на Степике! На все мои курсы будет скидка 20%!
Stepik: online education
Прокачай Java
Продвинутый курс по Java: потоки ввода-вывода, коллекции, многопоточность, даты и время, регулярные выражения, лямбда-выражения и Streams. Все, что Вы хотели узнать про Java и не стеснялись спрашивать...
👍6🔥2