分配内存后,为什么要用memset初始化?

来源:百度知道 编辑:UC知道 时间:2024/05/31 19:59:45
有时看到分配内存后紧接着用memset初始化。不知道有什么讲究没有。
请教各位。

BTW:不要告诉我memset函数的用法,我清楚。也不要简单的说不初始化会出问题,请你举实例说明会出现什么问题,谢谢。
看来我还是没说明问题?
to 晨之子:像你说的例子不用说当然得每次清零。要按你说的话那我觉得这个没什么讲究,用到了就清,不然也无所谓。
to foreverowes: 不知所云,不过还是谢谢你。

比如:

char *p = (char*)malloc(sizeof(char)*16);
strcat(p, "haha");
printf("%s", p);
free(p);

如果你要初始化为0的话直接用calloc就可以了:

char *p = (char*)calloc(16, sizeof(char));
strcat(p, "haha");
printf("%s", p);
free(p);

不知所云??
我以为你足够聪明能理解我的意思,
不过我举的例子也有够片面
第一个用malloc以后没有用memset或for初始化你用strcat能得到期待的结果么??而且很有可能就是一crash

还有晨之子也说了, 在使用任何变量之前你能确定他是已经初始化过的了么, "未初始化的变量所带来的是极其隐秘另人抓头挠儿而无法找到的BUG", 这是C++ Primer上的话, 这个问题本身就是一个编程习惯的问题, 小的程序不论, 但在大的程序中, 就算专家级的programmer都会犯错, 所以Stanley B.Lippman在讲完变量的时候就专门花了一整个篇幅来描述这个warnning, 你如果觉得你可以忽视, 你有能力判别任何变量在你使用之前是否存储着你期待的值, 指针是否指向正确的位置或是垃圾, 你就可以无视我的话, 无视Stanley的忠告.

简单点说吧:
如果您认为您的逻辑能力非常强悍、对于语言以及编译器的研究也非常透彻,保证不会因为没有手动初始化而出现什么bug,您尽管不用初始化
不然还是养成好习惯,调用任何非随机变量的取值之前保证该变量的取值不是任意的(已经初始化或者已经被赋值等等)
当然,如果您不初始化,也没有bug,不会有人计较什么的,反正没有人会无聊到没事看别人的代码是一行行很整齐的还是被码成方块状的(就是那种一行没有写满绝不换行的风格)

很多东西不初始化都做不了的