такой код:
void myFunction()
{
unsigned char *ptr = malloc(16); // аллоцируем память в куче
ptr[0] = 1;
ptr[7] = 8;
ptr[8] = 255;
ptr[15] = 255;
free(ptr); // возвращаем память.
// При этом очищаются только первые 8 байт памяти;
// Вторые 8 байт памяти остаются не тронутыми.
}
Когда дело доходит до освобождения, то в памяти очищаются только первые 8 байт, а остальные - нет.
Если до освобождения было:
01 00 00 00 00 00 00 08 ff 00 00 00 00 00 00 ff
То после:
00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 ff
Оно должно так быть?
free - освобождает участок памяти под последующее использование, но не "обнуляет" ее, а вот обращение к памяти после free - ub
Обсуждают сегодня