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);
此时初始化成功。