Ah, you mean “pointers to arrays”, because arrays are themselves just pointers in C/C++. That one still feels like it shouldn’t be needed in practice, because you already got a pointer, why can’t you use that directly? But yeah, I have no practical experience with C/C++.
And you do gotta fuck 'em up, as in free what they’re pointing to before you free the struct/array containing the pointers.
But when you do stick them into a struct/array, that often means you want to move them out of the scope with the malloc and potentially store them, too.
At that point, surely, it becomes rather difficult for your whole team to know or track down when it’s legal to free that.
I only know from Rust that if you want to store a pointer/reference in a struct, it makes you specify the lifetime of that struct, which has to be greater or equal to the lifetime of the thing the pointer is pointing to. Hairy stuff. We’ve basically told the Rust newbies on our team to just not store pointers in structs and that’s working rather alright.