очищается ли память массива после выхода из цикла или при переходе на следующий шаг цикла?

Картежник
Дата: 18.02.2015 14:46:39
Объявляю массив в цикле, что будет происходить при каждом шаге? Очистится ли уже ненужный и создастся новый буфер ? Не будет ли утечки? Здесь бывают случаи когда буфер может быть не полностью забит, а только какая та его часть.
for(int i=0;i<n;i++){
  char buf[MAX_BUF_SIZE];
  recv(sock[i], buf, MAX_BUF_SIZE, 0);
  add_to_ar(ar[i],buf); // этой функции нет. просто показать что с буфером что то выполняется
}
Dima T
Дата: 18.02.2015 14:49:25
Не будет утечки. Память будет выделена в стэке во время компиляции. Буфер будет один.
RWolf
Дата: 18.02.2015 14:50:29
Картежник,

не обнуляется.
Картежник
Дата: 18.02.2015 14:51:29
Dima T
Не будет утечки. Память будет выделена в стэке во время компиляции. Буфер будет один.

ок значит получается если на втором(len2) этапе цикла будет получено меньше данных чем в первом(len1), то то в массиве после данных второго этапа останутся не затертые данные из первого?
RWolf
Дата: 18.02.2015 14:54:25
Картежник,

да даже и на первой итерации в буфере будет случайный мусор.
Anatoly Moskovsky
Дата: 18.02.2015 14:57:38
Картежник,

1) На каждой итерации цикла вы имеете дело с новым массивом содержащим мусор (содержит ли этот мусор куски предыдущих массивов совершенно не важно - это просто мусор)
2) Утечек никаких нет.
Dima T
Дата: 18.02.2015 15:00:13
Картежник
Dima T
Не будет утечки. Память будет выделена в стэке во время компиляции. Буфер будет один.

ок значит получается если на втором(len2) этапе цикла будет получено меньше данных чем в первом(len1), то то в массиве после данных второго этапа останутся не затертые данные из первого?

Скорее всего так и будет, это на усмотрение компилятора, теоретически он может давать разные куски памяти, но технически ему проще всего давать каждый раз один и тот же кусок.

Кроме того учти что при первом проходе там будет не пусто (нули), а какой-то мусор. Т.к. локальные переменные не инициализируются автоматом.

Формально после каждого прохода массив buf выходит за область его видимости, уничтожается и создается заново в начале следующего прохода.
Dima T
Дата: 18.02.2015 15:03:12
Проверяется элементарно:
for(int i=0;i<n;i++){
  char buf[MAX_BUF_SIZE];
  printf("addr buf in memory %p\n", buf);
  ...
}
Anatoly Moskovsky
Дата: 18.02.2015 15:25:22
Dima T
Проверяется элементарно:

Вы же понимаете, что если вы постучали в бубен, и после того пошел дождь, то это не значит что каждый раз после бубна будет дождь?
MasterZiv
Дата: 18.02.2015 17:52:25
Картежник
Dima T
Не будет утечки. Память будет выделена в стэке во время компиляции. Буфер будет один.

ок значит получается если на втором(len2) этапе цикла будет получено меньше данных чем в первом(len1), то то в массиве после данных второго этапа останутся не затертые данные из первого?


Да. Такое возможно.