我是C的新手,我写了以下代码
#include <stdlib.h>
#include<stdio.h>
typedef struct
{
int name1;
}check1;
typedef struct
{
int name2;
}check2;
int main()
{
check1 *test1;
check2 *test2;
test1->name1=1;
test2->name2=2;
return 0;
}
当我执行它时,它给了我一个错误:
$ gcc test1.c
$ ./a.out
Memory fault
在gdb中: -
Program received signal SIGSEGV, Segmentation fault.
0x000000000040045e in main ()
可能是什么原因???
感谢。
答案 0 :(得分:3)
您已经声明了两个指针,但是您没有为它们指定任何内存。指针指向无效的内存。
试试这个:
check1 *test1 = malloc(sizeof(*test1));
if (test1 == NULL)
// report failure
check2 *test2 = malloc(sizeof(*test2));
if (test2 == NULL)
// report failure
答案 1 :(得分:0)
您还可以在堆栈上声明变量并将其地址分配给指针。
check checka;
check* pcheck = &checka;
printf("%i",pcheck->name1);