c - 在 C 中复制无符号整数值时出现段错误

标签 c linux ubuntu pointers segmentation-fault

<分区>

您好,我尝试为 SNMP Get 函数复制 Counter64 类型,但出现段错误。现在我写了一个普通的 C 函数并在 LINUX 中使用 gcc 编译我得到了这个错误

Segmentation fault (core dumped)

我在 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);
}

最佳答案

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

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

这样做的一种方法是,将 pu8RetVal 从指向结构的指针更改为结构类型变量,类似于

tSNMP_COUNTER64_TYPE pu8RetVal;

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

关于c - 在 C 中复制无符号整数值时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53759632/

相关文章:

c - 初学者 ftp 服务器困境,部分 deux

c - 遍历char数组,打印每个char的位(以C表示)

c - 我怎么知道我的程序在哪一步(预处理器、编译、链接)编译失败?

linux - 在 linux 中查找字符串并替换另一行

linux - 使用 xz 而不是 gz - 非常慢

linux - Chef 中的 apt-get update 和 apt-get upgrade

您能否将指向一种类型的函数的指针强制转换为另一种带有额外参数的函数?

c - 套接字连接结束,操作正在非阻塞套接字上进行

python - Amazon ec2 python boto,生成并连接到服务器实例,无法通过 ssh 进入生成的实例

vue.js - Chromium headless 页面无响应但可在 Firefox 上运行