嗨,我尝试为SNMP Get函数复制Counter64类型,但出现段错误。现在,我编写了一个普通的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("\n\t%d.%d\n", pu8RetVal->msn, pu8RetVal->lsn);
}
答案 0 :(得分:1)
在您的代码中,pu8RetVal
不会指向任何有效内存。作为自动局部作用域变量,pu8RetVal
的初始内容是不确定的-因此您正在使用导致undefined behaviour的无效内存。
在您可以读取并写入任何指针所指向的地址之前,需要确保指针指向一些有效的内存。
一种实现方法是将pu8RetVal
从指向结构的指针更改为结构类型变量,例如
tSNMP_COUNTER64_TYPE pu8RetVal;
,并相应地更改间接运算符。显然,您需要将变量的地址传递给memset()
。