c - 如果 free() 知道我的数组的长度,为什么我不能在我自己的代码中请求它?

标签 c memory free malloc

我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:

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/

相关文章:

bash - Hadoop 2.2.0流内存限制

r - 在巨大矩阵上应用运算时不允许使用负长度向量

c - c 是否跟踪分配的堆内存?

c - C : Merge Sort implementation - memory allocation 错误

c - 如何将文件中的单词保存到数组中?

c - 如何在 C 中动态加载 Rust 库?

c# - 在c#中加密大文件

c - 双重释放或损坏(出)中止(核心转储)

c++ - 导致编译器发出虚假警告的场景有哪些?

c - 尝试使用队列来处理服务器上的客户端消息 [C]