【发布时间】:2020-10-09 09:57:39
【问题描述】:
我正在尝试学习 c 并实现一些基本的内存分配。
当我使用 malloc、calloc 或 realloc 一个指向 int 的指针时,每次我最终都会得到相同的 8 字节内存块,即使我使用 20 字节的 malloc 初始化它也是如此。
如何解决?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main()
{
int* ptr = (int*) malloc(sizeof(int) * 5);
printf("%d\n", sizeof(ptr) / sizeof(ptr[0]));
ptr = (int*) realloc(ptr, 10 * sizeof(int));
printf("%d\n", sizeof(ptr) / sizeof(ptr[0]));
return 0;
}
【问题讨论】:
-
您已经知道大小,因为您刚刚在
realloc的第二个参数中指定了它。如果您要问如何仅从指针获得该大小,答案是您不能。sizeof是一个提供所提供参数大小的运算符。在这种情况下,这就是 指针 的大小,在您的平台上是 8 个字节。这就是sizeof的工作原理 -
请去掉 C++ 标签。
-
调用malloc的时候就已经知道大小了,不需要计算任何东西。
标签: c memory-management dynamic-memory-allocation