2010-02-16 91 views
0

这个coulde是一个愚蠢的问题,但我无法弄清楚我做错了什么(我没有在对方使用过两个结构)。如何在结构中使用结构?

我有两种结构:

struct test 
{ 
    struct ddata* difference; 
    int diff; 
}; 
struct test *MSG; 

struct ddata 
{ 
    char *filename; 
    char *size; 
}; 
struct ddata *difference 

,我想给他们重视这种方式(和我的程序冻结在这里):

MSG->difference = difference; 
    MSG->diff = diff; 

那我做错了什么?

在此先感谢!

kampi

编辑:

的不同结构变量在我的功能之一创建(并在那里我想给值到我的MSG结构)。 MSG结构变量是全局声明的(我不知道这是否相关)。差异值声明和填充这种方式:

struct ddata *difference = (struct ddata *) malloc(dif * sizeof *difference);  
memset(difference, 0, dif * sizeof *difference); 
... 
... 
... 
difference[diff].filename = strdup(primary[i].filename); 
difference[diff].size = strdup(primary[i].size); 
diff++; 

我希望我给你你需要什么。

+1

你分配任何内存,这些指针?如果您提供了一个能够编译的小而完整的示例,它可能会帮助我们看到问题所在。 顺便说一句,你没有两个结构“在”彼此(这是可能的,但它不是你在这里)。您有一个包含指向另一个结构的指针的结构。 – 2010-02-16 22:21:47

+0

命名机制让我很难专注于代码。 – Amy 2010-02-16 22:32:44

回答

1

也许你忘了做这样的事情:

MSG = (test*)malloc(sizeof(test)); 

+0

Oooo。非常感谢你。我真的忘了使用malloc。这是因为我醒了36个小时。再次感谢! – kampi 2010-02-16 22:40:28

2

您是否在使用前初始化为MSG?在分配任何东西之前,它必须指向某个有效的位置。其中一种方法是

MSG = malloc (sizeof *MSG); 

然后,在您设定的* MSG中设置字段是有效的。

0

还记得打电话

free(MSG); 

您也可以使用Valgrind的这将是看上堆栈转储检查你的代码。这里有任何例子。

valgrind -v --tool=memcheck --leak-check=full --track-origins=yes ./your_application 

希望这有助于