【发布时间】:2014-04-24 15:46:41
【问题描述】:
我有以下主要函数,它声明一个 World 结构并从存储在该结构中的 Xml 文件中读取数据:
int main(){
World *w;
w = create_world();
world_load("xmlfile", w);
return EXIT_SUCCESS;
}
World 结构的内存是通过调用函数 create_world() 分配的:
World *create_world(){
World *w = NULL;
if(!(w = (World *)malloc(sizeof (World)))) return NULL;
return w;
}
世界结构如下:
struct _World {
Space *space[MAX_SPACES + 1];
Object *object[MAX_OBJECTS + 1];
Link *link[MAX_LINKS + 1];
Player *player;
};
当我执行程序时,发生了分段错误。我已经尝试通过 valgrind 并且它不断报告“条件跳转或移动取决于未初始化的值”。这可能很明显,但我就是不知道问题出在哪里……在此先感谢。
【问题讨论】:
-
“发生分段错误”在您的源代码的哪一行?此外,Valgrind 会为该消息记录哪个源文件行“”条件跳转或移动取决于未初始化的值“”
-
main()是否知道World *create_world()是如何声明、原型化的?还是您的代码将其留给链接器以便更深入地了解彼此? -
@alk 段错误发生在另一个函数中。我已经跟踪了 valgrind 问题的根源,它似乎在分配中。然后它将问题拖到程序崩溃为止。在main中,我包含了包含 World *create_world() 原型的标题
-
"我已经用 valgrind 追踪了问题的根源" 提供确切的代码行(加上周围)可能对试图帮助你的人非常有帮助这个代码。显示 Valgrind 日志也很有帮助。
-
"变量未初始化":尊敬的用户XYZ,请问您在说什么?可能是因为它没有被初始化?请参阅我对使用
calloc()但上面的malloc()的评论。
标签: c malloc valgrind dynamic-memory-allocation