您的代码不仅为指针数组(蓝色数组)分配内存,而且在for循环中也为红色数组分配内存。因此,仅free(array)行将只释放由蓝色数组分配的内存,而不释放红色的内存。您需要释放红色的,就在与它们失去联系之前;也就是说,在释放蓝色数组之前。

顺便说一句;

当其他东西需要访问时,列使用的内存不是就会被覆盖吗?

不是的。操作系统将跟踪进程(程序)分配的内存,并且在进程终止之前不允许任何其他进程访问分配的内存。在正常情况下,-I意味着记住C语言没有垃圾收集器--操作系统永远不知道您已经失去了与分配的内存空间的连接,并且永远不会尝试这样的话:“嗯,这个内存空间对这个进程不再有用;所以,让我们取消分配它,并为另一个进程服务它。”