为什么会产生细分错误?

时间:2018-12-15 03:23:15

标签: c

我不确定为什么以下内容会产生细分错误。我已经定义了一个结构,并且正在尝试为其存储一个值。

typedef struct {
    int sourceid;
    int destid;
} TEST_STRUCT;

void  main( int argc, char *argv[] )  {
    TEST_STRUCT *test;
    test->sourceid = 5;
}

2 个答案:

答案 0 :(得分:2)

您声明一个指向该类型的指针。您需要分配内存以使指针指向:

#include <stdlib.h>

typedef struct {
    int sourceid;
    int destid;
} TEST_STRUCT;

int main(int argc, char *argv[])  {
    TEST_STRUCT *test;
    test = malloc(sizeof(TEST_STRUCT));
    if (test) {
        test->sourceid = 5;
        free(test);
    }
    return 0;
}

或者,您可以在堆栈上声明变量:

typedef struct {
    int sourceid;
    int destid;
} TEST_STRUCT;

int main(int argc, char *argv[])  {
    TEST_STRUCT test;
    test.sourceid = 5;
    return 0;
}

答案 1 :(得分:1)

测试指针未指向任何地址(指向一些垃圾),因此它达到了segV

 TEST_STRUCT *test;

初始化NULL是一个好习惯,在取消引用之前,请检查if (test != NULL) {} 然后只取消引用。

要解决此问题,请先you need to create variable of TEST_STRUCT and assign address of it测试指针或使用malloc / calloc分配内存,然后再尝试