Есть участок кода в программе:
while (true) {
char value[len+1];
//какие-то операции с переменной value
}
Есть ли тут утечка памяти, если не обнулять переменную value
в конце операций цикла?
Нет.
Ваш массив value
относится к классу автоматической памяти. Он будет уничтожен без вашего участия.
Теперь о том, когда утечки могут возникать. Утечки памяти могут появиться когда вы начинаете выделять память вручную:
char *value = new char[len+1];
В моем примере объявлена переменная value
типа "указатель на char
". Эта переменная указывает на участок памяти, за освобождение которого отвечаете вы.
Чтобы утечки не было, нужно удалить то, на что указывает value
:
delete[] value;
Таким образом код примет такой вид:
void foo(int len){
char *value = new char[len+1];
//...
delete[] value;
}
PS: Кстати, ваш код примерно так и должен выглядеть. Потому что в С++ размер массива должен быть известен на этапе компиляции. Если ваш компилятор прожевал char value[len+1]
, то это не значит что другой сделает то же самое.
Здесь не происходит динамическое выделение памяти, поэтому ни о какой утечке не может быть и речи. Хотя char value[len+1]
будет работать только на gcc.
Помню как то препода спрашивал "стоит ли выносить объявления переменных перед циклом" препод сказал что не нужно, не помню аргументировал ли.
Во всех кодах которые пишут умны люди (большие корпорации) тоже видно что переменные объявляться в теле цикла.
Моя логика говорит: зачем каждый раз выделять область памяти, это же тоже занимает какое то время для машины, но делаю как все))
Возможно "умные" компиляторы, все новые переменные в цикле как то сами оптимизируют код, не знаю.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
В С функции пишут под main() и потом приходится выносить прототипы функцийХотя в Паскале, да и в С можно, писать над main() и прототипы не понадобятся
ЗдравствуйтеНе могу нормально настроить Kernel Debugger Visual Studio 2015