Это не утечка памяти. Хуже, неопределенное поведение.
Вы можете вызывать free
только для указателя, возвращенного из malloc
(или calloc
, et c.). Вам не разрешено вызывать free
для указателя, указывающего куда-либо еще в возвращенном блоке хранения. Это приводит к неопределенному поведению.
Также на стороне более pedanti c, malloc
не создает никаких объектов, а arithmeti pointer c требует, чтобы указатель указывал на элемент массива объект для него иметь четко определенное поведение в C ++. Следовательно, технически у вас уже есть неопределенное поведение, когда вы делаете
buffer + j*N_floats_per_buffer
, хотя, вероятно, все компиляторы ведут себя так, как ожидалось (даже если стандарт не дает никаких гарантий). Это было решено только недавно для C ++ 20, где требуемый массив будет создан неявно.
Почти всегда следует использовать new
/ delete
, а не malloc
/ free
в C ++ .