gpt4 book ai didi

c++ - Malloc Memset 这个用法对吗?

转载 作者:行者123 更新时间:2023-11-28 06:55:01 28 4
gpt4 key购买 nike

这种用法有什么问题

void* buffer ; 
buffer = (void *)malloc(4096) ;
memset( buffer, 0, sizeof(buffer) );

int *data = static_cast<int*>(buffer) ;
for(int i=0 ; i<10 ; i++)
{
cout<< data[i] << "\n" ;
}

我在输出中得到垃圾值。我使用 memset 错了吗?

最佳答案

sizeof(buffer) 返回给您 void* 的大小(空指针的大小)。这与内存块的大小无关。

void* 的大小通常为 4 或 8 个字节,但这取决于平台。所以 memset() 只是清除了数组开头的几个字节。要清除所有这些,您必须传入数组的准确大小(以字节为单位)。在本例中为 4096。

如果

sizeof 是静态分配的内存块,例如 char buffer[4096],它实际上会返回内存块的大小(以字节为单位)。请记住,sizeof 是在编译时解析的。所以静态数组是编译器可以解析数组长度的唯一情况。对于动态分配的数组,编译器无法知道大小。无论数组数据类型如何,char*int*std::string*,调用sizeof指针将始终返回指针变量的大小,而不是它指向的内存的大小。

关于c++ - Malloc Memset 这个用法对吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com