memset如何工作

时间:2016-06-24 16:17:23

标签: c++

我创建了一个宏p=1, d=1, q=0, P=0, D=1, Q=1 只是为了避免输入的痛苦。

现在我有一些像这样的代码。

#define ll long long int

当我试图运行时。

我将arr的值视为 4294967296 420906795007 而不是 0 0

memset如何运作?

2 个答案:

答案 0 :(得分:5)

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

 memset(arr,0,sizeof(arr));
              ^^^^^^^^^^^ 

arr是一个指针,所以sizeof(arr)在64位机器上等于8,在32位上等于4,你想要的是:

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

答案 1 :(得分:4)

sizeof(arr)将给出指针的大小,而不是分配的内存。

尝试将此尺寸计算为零清除:

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