memset( &Address, 0, sizeof(Address));
经常看到这样的用法,其实不用的话,
分配数据的时候,剩余的空间也会置零的。请教。

解决方案 »

  1.   

    如果不清空,可能会在测试当中出现野值。你做下面的试验看看结果() char buf[5];
    CString str,str1;// memset(buf,0,sizeof(buf));
    for(int i = 0;i<5;i++)
    {
    str.Format("%d ",buf[i]);
    str1 +=str ;
    } TRACE("%s\r\n",str1);
      

  2.   

    其实不用的话,
    分配数据的时候,剩余的空间也会置零的。请教。
    -------------------------------------------------------------------------------
    其实不然!特别是对于字符指针类型的,剩余的部分通常是不会为0的,不妨作一个试验,定义一个字符数组,并输入一串字符,如果不用memset实现清零,使用MessageBox显示出来就会有乱码(0表示NULL,如果有,就默认字符结束,不会输出后面的乱码)
      

  3.   

    memset( &Address, 0, sizeof(Address));
    经常看到这样的用法,其实不用的话,
    分配数据的时候,剩余的空间也会置零的。
    --------------------
    在VB,delphi等下面是这样的。不过C++是没有缺省值的。
      

  4.   

    Debug build时,编译器会帮你把一些分配出来的内存设为特殊的值,譬如new出来的都是CD填充的(CD指Cleared data),但是Release build因为速度优化的关系,其值如果不初始化是不可预料的。
    你试试下面这段代码在Debug build和Release build下有何不同的动作:HANDLE hEvent;
    WaitForSingleObject(hEvent, INFINITE);
      

  5.   

    如果事先对hEvent进行初始化为NULL或者-1,那么可以有效避免这种在Debug build没事一到Release Build就出现的bug。
      

  6.   

    楼主,借你地方,问个相关的问题啊!。。char audiosendbuf[2576];    
    memset(audiosendbuf, 0, 2576);
    这样写,是正确的。char *audiosendbuf=new char[2576];    
    memset(audiosendbuf, 0, 2576);这样写,编译是报错的。。 应该怎么改?不改定义,因为这个定义改了的话,程序里其他的地方,都得改 :(  
    thanks...
      

  7.   

    没有编译错误啊,是不是你的逗号后面有非法字符什么的
    char a[100];    
    memset(a,0,sizeof(a));
    //这样写,是正确的。
    char* b = new char[100];    
    memset(b,0,100);
    没问题
      

  8.   

    楼主,借你地方,问个相关的问题啊!。。char audiosendbuf[2576];    
    memset(audiosendbuf, 0, 2576);
    这样写,是正确的。char *audiosendbuf=new char[2576];    
    memset(audiosendbuf, 0, 2576);这样写,编译是报错的。。 应该怎么改?不改定义,因为这个定义改了的话,程序里其他的地方,都得改 :(  
    thanks...---------------------------------------------------------------------------
    编译应该不会出错吧,但是运行的是有可能申请不到内存,最好判断一下