如何在结构中使用结构?

时间:2010-02-16 22:18:58

标签: c windows struct

这个问题是个问题,但是我无法弄清楚我做错了什么(我没有在彼此使用过两个结构)。

我有两种结构:

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

编辑:

差异struct变量是在我的一个函数中创建的(在那里我想给我的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++;

我希望我能给你你需要的东西。

3 个答案:

答案 0 :(得分:2)

您在使用前初始化MSG吗?在将任何内容分配给它之前,它必须指向某个地方有效。一种方法是

MSG = malloc (sizeof *MSG);

然后在* MSG中设置字段是有效的。正如您所做的那样。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

还记得打电话

free(MSG);

此外,您可以使用Valgrind检查您的代码,这可能会发现堆栈转储。这是任何一个例子。

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

希望这有帮助,