首先,我们知道,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 1279415632 1128088393 1934974010 1551069797 1818391888 1392534377 1230197573 1095650895 1128088909 1869835887 1392534892 1702130553 1769096301 1128097142 2035482682 1835365491 1953460050 1547322173 1684957527 7567215 1347241300 1547322173 1919251285 -1580180365 -441143875 1096561022 1631875184 1281122676 1818321775 1835357276 1297350768 977485136 1702057308 -799247502 -1263682143 1546747621 1148219457 1549890657 1633906508 1700027500 1426092141 1146242387 1229016399 1162100046 1330924371 1446456656 826487884 1398079553 1329877573 1313423693 1095717471 1196312909 1179603536 1027951689 1263748420 760237908 877418039 4272451
博客讨论了在使用memset与new动态分配内存时需要注意的问题。memset在初始化数组时非常有用,但当与new结合使用时,由于sizeof运算符返回的是单个元素的大小而非动态数组的实际尺寸,可能导致不期望的结果。文章提醒程序员在这种情况下要谨慎操作,以避免内存错误。
348

被折叠的 条评论
为什么被折叠?



