嗨,我试图复制SNMP Get函数的Counter64类型,我得到了seg错误。现在我写了一个普通的C函数,并在LINUX中使用gcc进行编译,我得到了这个错误
分段故障(核心转储(
我在UBUNTU 64位PC上运行。请帮助解决此错误。我的代码是
#include <stdio.h>
#include <string.h>
typedef struct SNMP_COUNTER64_TYPE {
unsigned int msn;
unsigned int lsn;
} tSNMP_COUNTER64_TYPE;
int main (void)
{
unsigned int a = 50;
unsigned int b = 20;
tSNMP_COUNTER64_TYPE *pu8RetVal;
memset(pu8RetVal, 0, sizeof(tSNMP_COUNTER64_TYPE));
pu8RetVal->msn = a;
pu8RetVal->lsn = b;
printf("nt%d.%dn", pu8RetVal->msn, pu8RetVal->lsn);
}
在代码中,pu8RetVal
不指向任何有效的内存。作为一个自动的局部作用域变量,pu8RetVal
的初始内容是不确定的,因此您使用的是无效内存,这会导致未定义的行为。
在可以对任何指针指向的地址进行读写操作之前,您需要确保指针指向某些有效内存。
一种方法是将pu8RetVal
从指向结构的指针更改为结构类型变量,类似
tSNMP_COUNTER64_TYPE pu8RetVal;
并相应地改变间接运算符。显然,您需要将变量的地址传递给memset()
。