c - malloc 函数在 C 中如何工作?

标签 c malloc sizeof

我的目标是读取文件并将其内容存储在给定偏移量和要读取的字节数的 char 数组中。我已经编写了一个函数来执行相同的操作,并且运行良好。

现在这个函数将从其他地方调用。所以我试图声明一个变量 char * data 来保存上述函数返回的内容。声明后我试着给它分配一些内存。 (我知道多少,因为我指定了要读取的字节数)。它是这样的:

char * data;
char * filename = "alphabet.txt";
int data_size = 10;
printf("data size: %d\n", data_size);
data = (char*) malloc (data_size);
printf("Size allocated to data: %d\n",sizeof(data));
return 0;

此代码提供以下输出:

data size: 10
Size allocated to data: 8

我不明白这种行为。谁能给我解释一下。

非常感谢

杀个杀

最佳答案

这与malloc无关。

sizeof 在编译时执行它的操作,而不是运行时。 sizeof(data)sizeof(char*) 相同。您的程序无法在编译时知道该指针引用了多少内存。

另一方面,sizeof(some_array) 将按您预期的方式工作,因为数组大小在编译时已知。

关于c - malloc 函数在 C 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19037019/

相关文章:

c - Sigtrap 代码中只有一个免费

c - C语言使用malloc的访问冲突

c - 从矩阵读取,用 malloc 分配,AddressSanitizer : heap-buffer-overflow

c++ - 确定数组大小时,std::size() 与 sizeof() 之间的区别

c - 从函数中获取数组的计数

c - c.. 中的 realloc() 打印垃圾值

c - 如何将两个十六进制数字合并为一个数字,然后将其转换为十进制。?

java - Java 中的链接错误

c++ - std::array<char, N> 的大小是多少?

c++ - 可以在 32 位应用程序中使用 64 位整数吗?