为结构分配内存的问题

时间:2014-03-18 18:41:33

标签: c malloc valgrind dynamic-memory-allocation

我有以下main函数声明一个World结构并从Xml文件中读取数据,该文件存储在结构中:

int main(){
    World *w;
    w = create_world();
    world_load("xmlfile", w);

    return EXIT_SUCCESS;
}

通过调用函数create_world():

来分配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并且继续报告"条件跳转或移动取决于未初始化的值"。这可能是显而易见的,但我无法弄清问题是什么......提前谢谢。

1 个答案:

答案 0 :(得分:0)

我的猜测是你正在使用World结构的字段而不实际初始化它们。由于这些字段只是指针,因此在为World对象分配内存时不会分配它们。当访问w-> space [0]时,这将导致访问冲突。您应该为数组分配内存,或者从World结构中的数组中删除指针表示法,具体取决于字段的使用方式。