int *p1=new int;
int *p2=new int;
p1=p2;
В итоге p1
и p2
будут указывать на один и тот же участок памяти. Произойдёт ли утечка памяти, занятой сначала p1
. Если да, то как этого избежать?
Да, утечка произойдет, причем в зависимости от окружающего кода - разная. Как избежать? Способов много. Один из простых - не использовать простые указатели, а использовать умные, которые автоматически занимаются управлением памятью.
Разумеется произойдёт! Ведь будет неизвестен адрес первого выделенного участка (и удалить его не получится...)
и куда страшнее будет если ниже вызывается:
delete p1;
delete p2;
лекарство одно умные указатели 1, умные указатели 2
и ещё new+delete
это уже C++ а не C
Собственно, в учебниках по C++, когда автор желает продемонстрировать читателю, что такое "утечка памяти", он часто приводит именно такой код. Даже если логически подумать, то все станет очевидно. Пример без указателей:
int a = 1;
int b = 2;
a=b; // сможем ли мы теперь иметь дело с первоначальным значением переменной "a" ?
А если в переменной указатель, то то его значение будет утеряно, как единица в данном примере. Следовательно, контроль над значением утерян, как и само значение.
Есть модель POSTИ есть модель category_r В последней 3 столбца: id, Post_id, category_id
Я написал код для подсчёта количества дней, через которые должны вернуть книги, взятые в библиотеке, но, к сожалению, код не правильно считает
Как показать информацию на нескольких страницах с помощью substr_count($_SERVER['REQUEST_URI']?