这个问题是个问题,但是我无法弄清楚我做错了什么(我没有在彼此使用过两个结构)。
我有两种结构:
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++;
我希望我能给你你需要的东西。
答案 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
希望这有帮助,