在C中复制无符号int值时出现分段错误



嗨,我试图复制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()

相关内容

  • 没有找到相关文章

最新更新