首先,为了缩小数组而重新分配数组并不是一个好主意。如果你这样做很多次,它可能会导致内存碎片。realloc()
必要时用于扩展数组。(当然,这也不会防止碎片化,但如果你使用realloc()
更少,那会有所帮助。)
也就是说,如果您仍然想缩小数组:正如文档(在提出这个问题之前您已经阅读过,amirite?realloc()
)所说,您必须调用malloc()
. 不是那个指针加十,不是那个指针乘以欧拉常数,不是那个指针减去当前月份的天数,没有别的,就是那个指针。
所以你必须先移动元素,然后重新分配数组。但这涉及将元素复制到临时缓冲区,如下所示:
double *tmp = malloc(90 * sizeof(*tmp));
memcpy(tmp, array, 90 * sizeof(*tmp));
double *guard = realloc(array, 90 * sizeof(*array));
if (!guard) {
// realloc() failed
abort(); // whatever
}
array = guard;
memcpy(array, tmp, 90 * sizeof(*tmp));
所以这并没有更好,您可以free()
在复制其内容并将新获得的指针分配给array
.