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_行--; } } } }
在上面的代码中,我只想在函数的某一点删除一个元素。因此,我只是用另一个指针重新分配指针,最后释放最终以构建失败告终的最终元素*预期为“void”,但参数类型为“row_container{aka struct row_container}”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
此外,如果我给&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 --;
}
}
}
}