首页 > 解决方案 > 向结构 C/C++ 添加另一个变量时出现 Malloc 错误

问题描述

我已经定义了我的结构:

    typedef struct data{
        int type;
        int x;
        int y;
        struct data *prox;
};

typedef struct data * Apt_No;

发生的事情是,如果我向结构中添加更多变量(我需要),那么下面函数的第二个 malloc 会出现以下错误:

Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed. Aborted. 

我试图了解正在发生的事情,但无法得出任何结论......每个结构都链接并添加到动态列表中。

Apt_No get_info_window(int *x_board, int *y_board, Apt_No topo){

    FILE *fp = fopen("board.txt", "r");

    if(fp == NULL){
        printf("Error opening brick file\n");
        exit(-1);
    }

    int k = 1;

    fscanf(fp, "%d %d", x_board, y_board);

    char *line;

    line = malloc(*x_board * sizeof(char)+1);

    SDL_Event event;
    struct data *event_data;
    struct data msg;


    char string = 'B';

    topo = create_dynamic_list();

    while(fscanf(fp, "%s", line) == 1){

        for (int j=1; j<*x_board; j++){

            if(line[j] == string){

                msg.x = j;
                msg.y = k;
                msg.type = brick;

                event_data = (struct data *)malloc(sizeof(struct data));

                if(event_data == NULL){
                    printf("Erro a alocar memória.\n");
                    return topo;
                }

                *event_data = msg;
                SDL_zero(event);
                event.type = Event_ShowCharacter;
                event.user.data1 = event_data;
                SDL_PushEvent(&event);

                topo = add_element_list(msg, topo);
                printf("Added element to the list\n");  
            }
        }  
        k = k+1;
    }
    return topo;
}

标签: clistmallocstructuresdl

解决方案


推荐阅读