我知道将动态分配的数组的长度传递给操作它们的函数是一个常见的约定:
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()
从哪里获得免费的(哈哈)知识?
Besides 克拉奇科的正确观点 https://stackoverflow.com/a/2650910/4298200标准没有提供这一点,真正的 malloc/free 实现通常会分配比您要求的更多的空间。例如。如果您要求 12 个字节,它可能会提供 16 个字节(请参阅内存分配器 http://g.oswego.edu/dl/html/malloc.html,其中指出 16 是常见尺寸)。所以它不需要知道你要求 12 个字节,只是知道它gave you一个 16 字节的块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)