使用memset()要注意

原型如下:

ptr是要写入的内存块的指针,value是要写入的值,num是从ptr指向的首地址开始一共要写入的字节数。

要注意num传入的参数

错误示范:

 

 实际上sizeof(InDegree)是4,等于sizeof(int)。也就是说这里的num参数只是一个指针的大小,没有完成初始化工作,除了第一个数组元素外,剩下的都是随机值。

应该改成:

 另外当使用memset()为整个数组赋值无穷大(或无穷小时),要注意memset()初值的取值范围,虽然原型中是int,但实际上是unsigned char:

 参考这两篇文章:

https://www.jianshu.com/p/b25acc1d2a9f

https://www.cnblogs.com/LLGemini/p/4309660.html

“实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节”

赋值最大值:

“但是当我们想将某个数组全部赋值为无穷大时(例如解决图论问题时邻接矩阵的初始化),就不能使用memset函数而得自己写循环了(写这些不重要的代码真的很痛苦),我们知道这是因为memset是按字节操作的,它能够对数组清零是因为0的每个字节都是0,现在好了,如果我们将无穷大设为0x3f3f3f3f,那么奇迹就发生了,0x3f3f3f3f的每个字节都是0x3f!所以要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。”

原文地址:https://www.cnblogs.com/mrlonely2018/p/12020171.html