memset和指针new一起使用时请小心

首先,我们知道,memset(数组名如A,0,sizeof(A))和memset(数组名如A,-1,sizeof(A))分别能够将整个数组A初始化为0和-1(前者0,后者-1)。

利用new的方法获得指定长度的动态分配内存的数组,此时memset不适用,那是因为sizeof(A)不是数组尺寸,而仅仅是该元素的size如int 4;

#include
using namespace std;

int main()
{
	int*X;
	X = new int[100];
	cout << sizeof(int) << endl;
	memset(X, -1, sizeof(X));
	for(int k = 0; k<100; k++) 
		cout << X[k] << ' ';
}
打印的效果是:其中第一个数字是int的尺寸,第二个数字-1表示第零位置被初始化为-1,其余的都没有初始化成功。
4
-1 8654280 1547322173 1735357008 544039282 1701603654 2015895667 2700856 1735357008 1181573490 1936026729 909670440 977485097 1869762652 1835102823 1818838560 673215333 691419256 1869762560 1835102823 859059799 977485106 1869762652 1835102823 1818838560 1342206821 1685015891 1348824181 103

你可能感兴趣的:(C++)