使用realloc()缩小数组的内存管理相关问题
C语言realloc裁剪内存的常见问题解答
被裁剪的5个元素对应的内存去向
当调用realloc(foo, 5 * sizeof(int))缩小内存块时,超出新大小的那5个int的内存空间,会被C标准库的内存分配器直接回收——要么归还给操作系统,要么放回分配器的可用内存池,供后续内存分配请求使用。你的程序之后不能再访问这部分内存,强行访问属于未定义行为。
是否属于内存泄漏
这完全不属于内存泄漏。内存泄漏的核心是程序持有一块无法再访问的已分配内存,且没有释放它。但这里裁剪掉的内存已经被分配器自动回收了,不存在程序“占着不放又用不了”的情况。
如何释放这5个int的内存
不需要你手动释放这部分内存——realloc在处理内存缩小操作时,已经自动完成了超出部分的回收工作。你只需要在不再使用foo指向的5个int内存块时,正常调用free(foo)释放整个内存块就行。
内容的提问来源于stack exchange,提问作者dikiy_opezdal
相关产品推荐
相关产品推荐

