Так что мне было интересно, что произойдет, если я поставлю '\ 0' в середине памяти malloc.Возможно ли утечка памяти вручную?
Я столкнулся с этим вопросом. Memory Leak when freeing a char array
В ответе Джесси Гуда говорится, что эта строка напечатает размер памяти «malloc».
std::cout << *((std::size_t*)arr - 1) << std::endl;
Означает ли это, если я изменить значение ((Std :: size_t) обр - 1), размер памяти, который будет освобожден, когда я называю «бесплатно» будет отличаться и причина утечка памяти, если измененное значение меньше исходного значения?
"** возможно распечатать **" и "** может вызвать утечку памяти **". Это зависящее от реализации поведение, прочитайте реализацию стандартной библиотеки malloc, чтобы узнать, как она освобождает память. Не зная, какой из них вы используете, любой ответ будет предположением. – Thomas
№ Ответ: [в теме, на которую вы ссылаетесь] (http://stackoverflow.com/a/17417163/2633423). Короче говоря: 'free' знает размер блока памяти, который он собирается освободить, предполагая, что вы передаете ему указатель на блок, полученный из' malloc' (в противном случае у вас есть неопределенное поведение). –
Вы используете недокументированную функцию, и тем самым вы вызываете неопределенное поведение. Ваша программа могла бы работать, могла бы потерпеть крах, или это может пробудить Ктулху. Ничего не гарантировано. – SigTerm