0

我是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 ()

可能是什么原因???

谢谢。

4

2 回答 2

3

你已经声明了两个指针,但是你没有分配任何内存让它们指向。指针指向无效内存。

试试这个:

check1 *test1 = malloc(sizeof(*test1));
if (test1 == NULL)
    // report failure

check2 *test2 = malloc(sizeof(*test2));
if (test2 == NULL)
    // report failure
于 2013-02-12T16:59:15.787 回答
0

您还可以在堆栈上声明变量并将它们的地址分配给指针。

check checka;
check* pcheck = &checka;
printf("%i",pcheck->name1);
于 2013-02-12T19:54:13.223 回答