结构初始化问题?
我使用一个结构是这样的:结构初始化问题?
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
谁可以告诉我如何处理它。谢谢!
我不知道你在这里有一个真正的问题,但对于适当的礼仪,你的配置是:
Fragment *frag=malloc(10*sizeof(Fragment));
if (frag) memset(frag,0,10*sizeof(Fragment));
使用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
不,我想要的数字是动态的。 – 2009-07-15 02:17:43
好吧,如果你需要10,你需要初始化10!在你的代码中,你只初始化了第一个片段的一个字段。 – 2009-07-15 02:47:55
的问题malloc不初始化任何它分配的内存。 Valgrind特别注意跟踪尚未初始化的任何内存区域。
尽管您应该注意错误,但Valgrind(假设一切正常)应该打印该错误是因为您试图在某处使用未初始化的数据,这可能是无意的。但是,单位变量的使用不在您问题中的代码中。
我认为你的意思是“typedef struct ...”而不是“define struct ...” – mhawke 2009-07-15 02:13:17