c - 在 malloc 内存上使用 sizeof()

标签 c malloc sizeof

Possible Duplicate:
newbie questions about malloc and sizeof

我正在尝试将字符串读入程序。当我注意到字符串有时会被损坏时,我尝试了以下代码:

 void *mallocated = malloc(100);
 printf("sizeof(mallocated) = %d\n", sizeof(mallocated));

根据我的程序,大小为mallocated8 ,尽管我为其分配了 100 个字节。因此,每当我尝试存储超过 8 个字节的字符串时,第 8 个字节之后的所有内容有时都会消失。为什么会发生这种情况?我该如何预防?

最佳答案

因为“字符串”指针的大小是8个字节。以下是使用 sizeof() 及其适当“大小”的一些示例。对于不习惯使用术语 size_of() 的人来说,有时会产生欺骗。在您的例子中,指针的大小是 8 个字节。下面是典型 32 位系统上的表示。

sizeof (char)   = 1
sizeof (double) = 8
sizeof (float)  = 4
sizeof (int)    = 4
sizeof (long)   = 4
sizeof (long long)  = 8
sizeof (short)  = 2
sizeof (void *) = 4

sizeof (clock_t)    = 4
sizeof (pid_t)  = 4
sizeof (size_t) = 4
sizeof (ssize_t)    = 4
sizeof (time_t) = 4

Source

您遗漏了如何确定字符串正在消失(字符数组)。它可能被传递给一个函数,您需要将显式长度作为变量传递或在某个地方跟踪它。使用 sizeof() 不会告诉你这一点。

查看我的previous question对此,你会发现我什至缺乏初步的理解。

关于c - 在 malloc 内存上使用 sizeof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44133571/

相关文章:

c - 为单个测试可执行文件的范围替换通用 .o 文件中的 C 函数

c - realloc() 或 free() 或双重释放或损坏中的 C 问题

c - C 中显示虚数的类型

c - 线程例程内的 malloc

c - 使用 sizeof 运算符

c - 为什么 sizeof(char + char) 返回 4?

c - 结构 tm 的大小

C 中的字符数组?

c - 设置新的自变量会更改 c 中的所有其他变量

已分配 C++ 指针 -> 错误 : pointer being freed was not allocated