Pointers 释放意味着双重自由或腐败 typedef结构行\u容器 { 整数大小; 字符*数据; }row_集装箱; typedef结构消息栏 { 字符消息[80]; 时间信息时间; }信息栏; typedef结构砖尺寸 { int行; int col; int当前_行; int当前_列; int数据行; int row_off; 内科卢关; row_容器*容器; 字符*文件名; 消息栏*消息栏; }砖瓦窗; 无效容器\u删除\u字符(结构砖\u win\u大小*win) { uint8\u t插入\u标志=1; int row=win->当前_行; int offset=win->current\u列; 行_container*container=win->container; char*data=container[row].data; if(偏移量data_行-1){ 容器[索引]=容器[索引+1]; }否则{ 自由(容器[索引];//错误行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } } 如果(赢->数据行!=0){ win->container=realloc(win->container,sizeof(行\容器)*(win->data\行-1)); win->data_行--; } } } }

Pointers 释放意味着双重自由或腐败 typedef结构行\u容器 { 整数大小; 字符*数据; }row_集装箱; typedef结构消息栏 { 字符消息[80]; 时间信息时间; }信息栏; typedef结构砖尺寸 { int行; int col; int当前_行; int当前_列; int数据行; int row_off; 内科卢关; row_容器*容器; 字符*文件名; 消息栏*消息栏; }砖瓦窗; 无效容器\u删除\u字符(结构砖\u win\u大小*win) { uint8\u t插入\u标志=1; int row=win->当前_行; int offset=win->current\u列; 行_container*container=win->container; char*data=container[row].data; if(偏移量data_行-1){ 容器[索引]=容器[索引+1]; }否则{ 自由(容器[索引];//错误行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 } } 如果(赢->数据行!=0){ win->container=realloc(win->container,sizeof(行\容器)*(win->data\行-1)); win->data_行--; } } } },pointers,free,Pointers,Free,在上面的代码中,我只想在函数的某一点删除一个元素。因此,我只是用另一个指针重新分配指针,最后释放最终以构建失败告终的最终元素*预期为“void”,但参数类型为“row_container{aka struct row_container}” 此外,如果我给&de reference运算符,它在执行过程中会出现双重自由或损坏错误您是否也可以添加main?一些我们可以执行并看到结果的东西?实际上它是大框架的一部分,简而言之,我会先进行mallocing,然后realloc到我需要的任何数组大小 ty

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


此外,如果我给&de reference运算符,它在执行过程中会出现双重自由或损坏错误

您是否也可以添加main?一些我们可以执行并看到结果的东西?实际上它是大框架的一部分,简而言之,我会先进行mallocing,然后realloc到我需要的任何数组大小
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 --;
            }
        }
    }

}