我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:
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);
}
但是如果我没有办法从指针中获取分配内存的长度,当我给出的只是非常相同的指针?作为一名 C 程序员,我为什么不能施展魔法?
free()
从哪里获得免费(har-har)知识?
最佳答案
此外Klatchko's correct point该标准没有提供它,真正的 malloc/free 实现通常会分配比您要求的更多的空间。例如。如果您要求 12 个字节,它可能会提供 16 个(请参阅 A Memory Allocator ,其中指出 16 是常见大小)。所以它不需要知道您要求 12 个字节,只是它给了您一个 16 字节的 block 。
关于c - 如果 free() 知道我的数组的长度,为什么我不能在我自己的代码中请求它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946513/