释放表示双重释放或腐败

问题描述

typedef struct row_container
{
   int size;
   char *data;
}row_container;


typedef struct message_bar
{
   char message[80];
   time_t message_time;
}message_bar;

typedef struct brick_win_size
{
   int row;
   int col;
   int current_row;
   int current_column;
   int data_row;
   int row_off;
   int col_off;
   row_container *container;
   char *filename;
   message_bar *msg_bar;
}brick_window;



void container_delete_character(struct brick_win_size *win)
{
    uint8_t insert_flag = 1;
    int row = win->current_row;
    int offset = win->current_column;
    row_container *container = win->container;
    char *data = container[row].data;

    if(offset < container[row].size){
        memmove(&data[offset],&data[offset + 1],container[row].size - 1);
        data = realloc(data,container[row].size - 1);
        container[row].data = data;
        container[row].size--;
    }

    if(insert_flag){
        if((container[row].size == 0) && (row < win->data_row)){

            for(int index = row; index < win->data_row; index++){
                if(index != win->data_row -1){
                    container[index] = container[index+1];
                }else{
                   free(container[index]); //error line...............................
                }
            }

            if(win->data_row != 0){
                win->container = realloc(win->container,sizeof(row_container) * (win->data_row - 1));
                win->data_row --;
            }
        }
    }

}

在上面的代码中,我只想在函数中的某一点删除一个元素。所以我只是用另一个指针重新分配了指针,最后我释放了最终会在构建失败中结束的最终元素* 预期为'void ',但参数的类型为'row_container {aka struct row_container}'

此外,如果我给&de引用运算符,它会在执行期间以double free或贪污错误结束

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...