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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们知道,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 1030255713 1465662019 1868852841 1935438711 1702130553 1546793837 1684957527 1349744495 1919252335 1818585171 829840492 1297887278 1819632751 6058853 1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值