我知道传递动态分配数组长度给操作它们的函数是一种常见的惯例:
void initializeAndFree(int* anArray, size_t length);
int main(){
size_t arrayLength = 0;
scanf("%d", &arrayLength);
int* myArray = (int*)malloc(sizeof(int)*arrayLength);
initializeAndFree(myArray, arrayLength);
}
void initializeAndFree(int* anArray, size_t length){
int i = 0;
for (i = 0; i < length; i++) {
anArray[i] = 0;
}
free(anArray);
}
但如果我无法从指针获取已分配内存的长度,那么当我只提供同一指针时,free()
如何“自动地”知道要释放什么?作为C程序员,为什么我不能参与这个神奇过程呢?
free()
从哪里获取其释放(哈哈)的知识?
int length
是错误的。数组长度、偏移量、类型大小以及其他类似的东西都是size_t
类型的,该类型在stddef.h
、stdio.h
、stdlib.h
和string.h
头文件中定义。size_t
和int
的主要区别在于int
是有符号的,而size_t
是无符号的,但在某些平台(例如 64 位)上它们的大小也可能不同。你应该始终使用size_t
。 - Chris Lutzint32_t
、regex_t
、time_t
、wchar_t
等等。 - Matthew Flaschen