我不确定为什么以下内容会产生细分错误。我已经定义了一个结构,并且正在尝试为其存储一个值。
typedef struct {
int sourceid;
int destid;
} TEST_STRUCT;
void main( int argc, char *argv[] ) {
TEST_STRUCT *test;
test->sourceid = 5;
}
答案 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分配内存,然后再尝试