繁体   English   中英

C分段错误:11错误

[英]C Segmentation fault: 11 error

我对C相当./test ,尽管可以编译此代码(使用gcc -Wall -o test test.c ),但是运行./test只会导致输出dbecher$: Segmentation fault: 11 有人知道是什么原因造成的吗?

好吧,我知道不使用指针而是可以分配一个普通的结构,但是我正在使用它来测试指针的某些行为。 所以我想继续为该结构使用指针变量。

这里的代码片段:

#include <stdio.h>

typedef struct HumidityMessage {
  int nodeId;
  int sequenceNumber;
  int humidity;
} HumidityMessage;

HumidityMessage* packet;

int main() {
    packet->nodeId = 0;
    packet->sequenceNumber = 1;
    packet->humidity = 3;

    printf("This is the address of packet: %d", packet->nodeId);
}

分段错误是由无效的内存访问引起的。 在这种情况下,您会得到它,因为您在不首先为其分配空间的情况下就引用了数据包指针。

HumidityMessage* packet; 什么都没有指向。 初始化它:

HumidityMessage* packet = malloc(sizeof(HumidityMessage));

不要使用指针。 使用HumidityMessage packet; 代替。

当前, packet已初始化为nullptr ,取消引用它是非法的。

另外,您可以保留指针并在需要之前为其分配内存,但是对于全局变量来说,找到相应的free是个难题。

使用c内置的malloc函数将内存分配给数据包指针。 Packet =(HumidityMessage *)malloc((HumidityMessage)的大小); 或者,您可以直接采用结构的变量并分配值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM