Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ memset是如何工作的_C++ - Fatal编程技术网

C++ memset是如何工作的

C++ memset是如何工作的,c++,C++,我创建了一个宏define ll long int,只是为了避免打字的痛苦 现在我有一些这样的代码 ll size = 2; ll *arr = new ll[size]; memset(arr,0,sizeof(arr)); 当我试着运行这个时 我看到arr的值是4294967296 420906795007,而不是0 memset是如何工作的?SizeOfar将给出指针的大小,而不是分配的内存 尝试此操作以将大小计算为零清除: ll size = 2; ll *arr = new ll[s

我创建了一个宏define ll long int,只是为了避免打字的痛苦

现在我有一些这样的代码

ll size = 2;
ll *arr = new ll[size];
memset(arr,0,sizeof(arr));
当我试着运行这个时

我看到arr的值是4294967296 420906795007,而不是0

memset是如何工作的?

SizeOfar将给出指针的大小,而不是分配的内存

尝试此操作以将大小计算为零清除:

ll size = 2;
ll *arr = new ll[size];
memset(arr,0,sizeof(*arr) * size);

问题是在memset调用中使用了错误的大小:

 memset(arr,0,sizeof(arr));
              ^^^^^^^^^^^ 
arr是指针,因此sizeofarr在64位计算机上等于8,在32位计算机上等于4,您需要的是:

memset(arr,0,sizeof(ll) * size);

与MeSET无关,SisiFoFrr给了指针变量的大小,而不是大小。既然你是在使用C++,为什么还要尝试使用C库的MeMSET函数呢?使用值初始化或STD::填写并编写适当的惯用C++,而不是冒充C++。为什么使用宏长长的int而不是Type或别名?@ RYANP——宏似乎是在线评语使用的可怕编码标准的一部分。做一个搜索,你会看到很多相同宏的帖子,所有SPOJ和在线评委的帖子。