结构初始化问题?

问题描述:

我使用一个结构是这样的:结构初始化问题?

define struct _Fragment{ 
    int a; 
    char *seq; 
}Fragment; 

我想初始化结构,并使用的malloc()方法中返回这样

Fragment *frag=malloc(10*sizeof(Fragment)); 

动态存储器中。然后我会使用片段指针是这样的:

frag->seq="01001"; 

然后,当我返回大量碎片时就会出现问题。错误消息说(使用valgrind工具):

Uninitialised value was created by a heap allocation 

谁可以告诉我如何处理它。谢谢!

+1

我认为你的意思是“typedef struct ...”而不是“define struct ...” – mhawke 2009-07-15 02:13:17

我不知道你在这里有一个真正的问题,但对于适当的礼仪,你的配置是:

Fragment *frag=malloc(10*sizeof(Fragment)); 
if (frag) memset(frag,0,10*sizeof(Fragment)); 
+12

使用calloc()更容易() – Juliano 2009-07-15 02:14:36

的问题是,即使你使用malloc为片段结构分配内存,您尚未初始化任何值。 malloc返回的内存,但不保证任何特定的值,所以你必须明确地初始化结构成员

Fragment* frag = malloc(10*sizeof(Fragment)); 
int i = 0; 
for (i = 0; i < 10; i++) { 
    frag[i].a = 0; 
    frag[i].seq = NULL; 
} 

如果你想保本初始化的内存,你应该使用释放calloc。它具有增加内存消耗的额外成本,但对您的应用程序而言可能并不重要。

您也应该检查的malloc居然成功了:)

你的代码看起来合理,但在下面的行;

Fragment *frag=malloc(10*sizeof(Fragment)); 

您确定需要10*吗?

如果您需要分配10个片段,那么你应该承担责任,初始化所有10

+0

不,我想要的数字是动态的。 – 2009-07-15 02:17:43

+0

好吧,如果你需要10,你需要初始化10!在你的代码中,你只初始化了第一个片段的一个字段。 – 2009-07-15 02:47:55

的问题malloc不初始化任何它分配的内存。 Valgrind特别注意跟踪尚未初始化的任何内存区域。

尽管您应该注意错误,但Valgrind(假设一切正常)应该打印该错误是因为您试图在某处使用未初始化的数据,这可能是无意的。但是,单位变量的使用不在您问题中的代码中。