【问题标题】:How to use structure in a structure?如何在结构中使用结构?
【发布时间】:2011-01-17 14:54:58
【问题描述】:

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

我有两个结构:

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;

那我做错了什么?

提前致谢!

坎皮

编辑:

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

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

【问题讨论】:

  • 您是否为这些指针分配了内存?如果您提供一个能够编译的小而完整的示例,它可能会帮助我们了解问题所在。顺便说一句,你没有两个相互“在”的结构(这是可能的,但这不是你在这里所拥有的)。您有一个结构包含指向另一个结构的指针。
  • 命名方案让我很难专注于代码。

标签: c windows struct


【解决方案1】:

还记得打电话

free(MSG);

您还可以使用会发现堆栈转储的 Valgrind 检查您的代码。这是任何示例。

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

希望这会有所帮助,

【讨论】:

    【解决方案2】:

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

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

    ?

    【讨论】:

    • 哦哦。非常感谢。我真的忘了使用malloc。这是因为我醒了 36 小时。再次感谢!
    【解决方案3】:

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

    MSG = malloc (sizeof *MSG);
    

    那么在 *MSG 中设置字段是有效的,就像你正在做的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2022-01-27
      • 2020-08-21
      相关资源
      最近更新 更多