在 C/C++ 中,为了处理数组,您需要知道它的大小。因此,您必须始终“记住”此大小并将其作为参数拖入所有处理函数中。例如:
void foo(int* arr, size_t n) {
for (size_t i = 0; i < n; i++) {
arr[i] = i * i;
}
}
但是由于某种原因,释放资源时没有必要知道大小。free(arr)
如果内存是通过malloc()
or分配的,您可以简单地调用calloc()
。或者,delete[] arr;
如果内存是通过 operator 分配的,则可以使用 operator new int[n]
。
问题是如果 C/C++ 不知道数组的大小,它如何知道要释放多少内存?函数free()
和运算符delete[]
不将数组的大小作为参数,而仅将指向数组的指针作为参数。如果 C / C ++ 可以以某种方式计算大小,那么为什么要不断地将它“拖”在一个单独的变量中呢?