C++ memset初始化数组失败原因分析

     int *arr = new int[10];
    // int arr[10] = {};
    memset(arr, -1, sizeof(arr));
    printf("%d\n", sizeof(arr));
    for (int i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
  delete []arr; //最后记得释放空间,否则会导致内存泄漏

输出结果只有前两个元素被初始化为-1了。

原因就是在于第一种申明方式返回的是一个指针,在64位机器中,int指针的大小是8bytes,恰好是两个int(8 bytes),所以说恰好前两个元素被初始化了。

第二种申明方式为什么能成功呢,第二种方式是申明了一个数组。sizeof(a2) = 4 *10;

如果想在第一种方式申明数组的情况下使用memset初始化数组,可以改变memset第三个参数为sizeof(type) *n.type是你数组的类型,n是申明数组的长度。

memset(arr, -1, sizeof(int) * 10);

 

 

 此时初始化成功。

posted @ 2021-12-13 16:28  Dre_am_tale  阅读(637)  评论(0编辑  收藏  举报