我使用snmpstartup函数编写程序,msdn上是这样说的:
SNMPAPI_STATUS SnmpStartup(
  smiLPUINT32 nMajorVersion,   
  smiLPUINT32 nMinorVersion,   
  smiLPUINT32 nLevel,          
  smiLPUINT32 nTranslateMode,  
  smiLPUINT32 nRetransmitMode  );我的程序中先
  smiLPUINT32 nMajorVersion;  
  smiLPUINT32 nMinorVersion;
  smiLPUINT32 nLevel;   
  smiLPUINT32 nTranslateMode;  
  smiLPUINT32 nRetransmitMode;再调用SNMPAPI_STATUS SnmpStartup(nMajorVersion,nMinorVersion,   
   nLevel, nTranslateMode,nRetransmitMode );,但会出错!而改用:
unsigned long nMa,nMi,nL,nT,nR;
再snmpstartup(&nMa,&nMi,&nL,&nT,&nR);就可以!
这是为什么?
smiLPUINT32 是长整型指针(unsigned long *) 
这个问题是不是很简单?是不是我的C语言学的有问题?
请各位高手告诉我!谢谢!!

解决方案 »

  1.   

    指针没学好:)
    smiLPUINT32既然是指针,用之前必须先指向某个unsigned long 
    则你定义以后必须new(C++)或者malloc(C)出来,
    或者
    unsigned long nMa,nMi,nL,nT,nR;
    nMajorVersion=&nMa;
    ......
    这样子
      

  2.   

    SnmpStartup函数之所以传指针当然是为了节约值传递的大量拷贝带来的时间开销,但是它肯定是要使用传入的指针所指向的内存区域的,而你的指针都还没分配指向的内存空间,这实际上就是内存讹用,所以会报错。foxmail(萧遥)的解决办法可行,但最好你应该知道这些指针指向的内存数据的意义并作一些初始化再调用SnmpStartup。