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

2 つのポインタを宣言しましたが、それらが指すメモリを割り当てていません。ポインタが無効なメモリを指しています。

これを試して:

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 に答える