c-malloc导致int更改值



我对C有点陌生,在做一个项目时遇到了一个我很想理解的奇怪行为。(可能是我错过了什么(。

我有以下结构:

typedef struct {
char *name;
int status;
int strength;
} Pig;
typedef struct {
char *name;
char color[10];
int injuryPower;
int penType;
} Bird;

当我像这样分配清管器时,它正常工作:

Pig *pig_1 = malloc(sizeof(Pig *));
pig_1->status = 2;
pig_1->strength = 7;
pig_1->name = malloc(sizeof(char) * 11);
pig_1->name = "PigA";

但当我以类似的方式分配鸟时,我会有这种奇怪的行为:

Bird *bird_1 = malloc(sizeof(Bird *));
1) bird_1->penType = 2;
2) bird_1->injuryPower = 5;
3) bird_1->name = malloc(sizeof(char) * 6);
bird_1->name = "BirdA";
bird_1->color[0] = 'R';
bird_1->color[1] = 'e';
bird_1->color[2] = 'd';
bird_1->color[3] = '';

在第(1(行中,笔类型被定义为2。
第(2(行中的笔类型仍然是2。
第(3(行中,笔类型根据我在bracets中定义的值进行更改,因此在本例中,它将更改为35。

我使用Cygwin 64位作为我的编译器。

有人能解释一下我在这里遗漏了什么吗?为什么笔类型的值在变化,尽管我没有改变它?

是因为malloc吗?我是不是做错了什么?

非常感谢!

Pig *pig_1 = malloc(sizeof(Pig *));
...
Bird *bird_1 = malloc(sizeof(Bird *));

您分配的是指针的大小,而不是结构的大小。

Pig *pig_1 = malloc(sizeof(Pig));
...
Bird *bird_1 = malloc(sizeof(Bird));

将为整个结构预留足够的空间。

因为您只为结构的第一个成员(也是指针(分配了足够的内存,所以其他成员位于可以为其他变量保留的内存区域中。你看到的是另一个变量的值正在改变,并反映在你的结构中。

相关内容

  • 没有找到相关文章

最新更新