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

时间:2018-12-13 10:22:24

标签: c linux ubuntu pointers segmentation-fault

嗨,我尝试为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);
}

1 个答案:

答案 0 :(得分:1)

在您的代码中,pu8RetVal不会指向任何有效内存。作为自动局部作用域变量,pu8RetVal的初始内容是不确定的-因此您正在使用导致undefined behaviour的无效内存。

在您可以读取并写入任何指针所指向的地址之前,需要确保指针指向一些有效的内存。

一种实现方法是将pu8RetVal从指向结构的指针更改为结构类型变量,例如

tSNMP_COUNTER64_TYPE pu8RetVal;

,并相应地更改间接运算符。显然,您需要将变量的地址传递给memset()