0

所以我遇到了一个问题,我有一个名为 Image 的结构和一个函数 LoadImage ,它工作得很好,但是当我有这样的事情时:

动画.h

typedef struct Anim
{
Anim_data anim_data[20];
Image* img_anim; 
int curr;
}Anim;


void AnimLoad(char* name, Anim* a)
{
 ImageLoad("../../Resource/pingvin.jpeg", a->img_anim);

}

ImageLoad 函数中断,我认为它与 a->img_anim 有关,但看不出它有什么问题,当我给出另一个结构中没有的 Image 结构时工作正常。

因此,为了清楚起见该函数有效,当我给它一个我从另一个结构调用的结构 Image 时,它​​就不起作用了。

4

1 回答 1

3

您需要像这样为 a->img_anim 分配空间:

 Anim a;
 a.img_anim = malloc(sizeof(Image *));
 a.img_anim = Address of image.

那么在你的函数中它应该可以工作。

编辑:

在结构的 C99 规范中,除非您手动初始化它,否则它不会被初始化,例如:

 struct a{
 int member1;
 int member2;
 }

 struct a example = {.member1 = 2002,.member2 = 3003};  //This is initialization manually.  This is like manually allocating an array with
 //Int[] a = {1, 2, 3};

否则你需要这样做:

  struct a;
  a.member1 = malloc(sizeof(int));
  a.member2 = malloc(sizeof(int)); 

这为 member1 和 member2 提供了大小为 4 字节(整数)的内存。
如果你不这样做,member1 和 member2 在内存中就没有点!

于 2013-05-10T18:02:11.663 回答