可能重复: 关于malloc和sizeof的新问题
我正在尝试将字符串读入程序中。当我注意到字符串有时被破坏时,我尝试了以下代码:
void *mallocated = malloc(100);
printf("sizeof(mallocated) = %d\n", sizeof(mallocated));根据我的程序,mallocated的大小是8,尽管我为它分配了100个字节。因此,每当我尝试存储大于8字节的字符串时,第8字节之后的所有内容有时都会消失。为什么会发生这种事,我怎样才能防止它发生?
发布于 2010-02-14 02:13:24
在C89中,sizeof运算符在编译时只找到以字节为单位的变量的大小(在本例中为8字节的void指针)。它的工作方式与您期望的在普通数组上的工作方式一样,因为它们的大小在编译时是已知的。
char arr[100]; // sizeof arr == 100
char *p = arr; // sizeof p == 4 (or 8 on 64-bit architectures)
char *p = malloc(100); // sizeof p == 4 (or 8). Still!要知道堆分配内存的大小,您需要手动跟踪它,sizeof不会帮助您。
https://stackoverflow.com/questions/2259890
复制相似问题