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

博客讨论了在使用memset与new动态分配内存时需要注意的问题。memset在初始化数组时非常有用,但当与new结合使用时,由于sizeof运算符返回的是单个元素的大小而非动态数组的实际尺寸,可能导致不期望的结果。文章提醒程序员在这种情况下要谨慎操作,以避免内存错误。
摘要由CSDN通过智能技术生成

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

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

#include<bits/stdc++.h>
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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值