c - C 中数组的动态内存分配

标签 c arrays memory dynamic malloc

所以我尝试使用 malloc 在 C 中创建一个动态数组,但由于某些原因它没有成功。这是我的代码:

    int* test = (int*) malloc(20 * sizeof(int));
    printf("Size: %d\n", sizeof(test));

当我运行这段代码时,控制台输出 8,但我相信它理想情况下应该输出 80,因为 int 的大小是 4,而我正在创建其中的 20 个。那么为什么这不起作用?谢谢你的帮助。 :)

最佳答案

sizeof 运算符返回 int* 的大小,它只是一个指针。在 C 中,当您使用 malloc 动态分配内存时,对 malloc 的调用会返回指向新分配的内存块(通常在堆上)的指针。指针本身是只是一个内存地址(在大多数现代系统上通常只占用 4 或 8 个字节)。您需要跟踪自己分配的实际字节数。

C 语言只会跟踪静态分配的缓冲区(堆栈数组)的缓冲区大小,因为数组的大小在编译时可用。

int test[100];
printf("Sizeof %d\n", sizeof(test))

这将打印一个等于 100 * sizeof(int) 的值(在大多数现代机器上通常为 400)

关于c - C 中数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803398/

相关文章:

c - 为什么函数会导致此编译器警告 : Incompatible pointer to integer conversion returning 'char[20]' from a function. ..

c++ - 如何将 C 中声明的可选参数方法转换为 C++

需要 Java SE 数组帮助

c++ - 释放不需要的 QImages

c++ - 使用传入数组初始化其他数组

c - 使用 C 语言开源 RTSP/RTP 堆栈

javascript - 从数组中删除对象 onclick

javascript - 如何通过传递参数从列表数组中检索特定数据作为字符串?

php - PHP 是否在函数结束后立即释放局部变量?

c - 哈希函数没有给出想要的结果