为什么memset在这种情况下会失败?

时间:2016-02-14 03:28:33

标签: c++ dynamic-memory-allocation memset

#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        int *b1 = (int *)malloc(sizeof(int)*4);
        memset(b1, 0, sizeof(b1));
        cout<<"\nArray after memset:";
        for(int i=0; i<4; i++)
             printf("\t%d", b1[i]);
        for(int i=0; i<4; i++)
             scanf("%d", &b1[i]);
        free(b1);
    }
}

输入: 2 10 20 三十 40 10 20 三十 40

对于给定的输入,代码提供以下输出:

  

memset后的数组:0 0 0 0

     

memset后的数组:0 0 30 40

为什么memset在第二种情况下失败?

(另外,我注意到在删除free(b1)语句时,memset工作正常)。

2 个答案:

答案 0 :(得分:3)

使用

memset(b1, 0, sizeof(int)*4);

因为sizeof(int)*4是已分配内存块的大小。

答案 1 :(得分:2)

sizeof(b1)将返回b1的大小和存储整数指针的变量。

你想要它指向的东西的大小 - 即malloc的参数 - sizeof(int)*4

memset

中使用它

另外,为什么在C ++代码中使用scanfmalloc?为什么不使用std::vector