Pointers 两个指针指向同一内存,realloc失败 void container\u row\u change(struct brick\u win\u size*win,int字符) { 行容器*容器=&(赢->容器[赢->当前行]; /*int offset=win->current\u列; char*data=win->container[win->current_row]。数据; 如果(偏移量=win->col) 偏移量=容器->大小; 数据=realloc(数据,win->容器[win->当前行].size+2); memmove(&data[offset+1],&data[offset],(win->container[win->current_row].size-offset+1)); 数据[偏移量]=字符; win->current_column++; 容器->大小++; */ int offset=win->current\u列; 如果(偏移量=win->col) 偏移量=容器->大小; win->container[win->current_row]。数据=realloc(win->container[win->current_row]。数据,win->container[win->current_row]。大小+2); memmove(&(win->container[win->current_row]。数据[offset+1]),&(win->container[win->current_row]。数据[offset]),win->container[win->current_row]。大小-offset+1); win->容器[win->当前_行].数据[offset]=字符; win->current_column++; win->容器[win->当前_行].size++; }

Pointers 两个指针指向同一内存,realloc失败 void container\u row\u change(struct brick\u win\u size*win,int字符) { 行容器*容器=&(赢->容器[赢->当前行]; /*int offset=win->current\u列; char*data=win->container[win->current_row]。数据; 如果(偏移量=win->col) 偏移量=容器->大小; 数据=realloc(数据,win->容器[win->当前行].size+2); memmove(&data[offset+1],&data[offset],(win->container[win->current_row].size-offset+1)); 数据[偏移量]=字符; win->current_column++; 容器->大小++; */ int offset=win->current\u列; 如果(偏移量=win->col) 偏移量=容器->大小; win->container[win->current_row]。数据=realloc(win->container[win->current_row]。数据,win->container[win->current_row]。大小+2); memmove(&(win->container[win->current_row]。数据[offset+1]),&(win->container[win->current_row]。数据[offset]),win->container[win->current_row]。大小-offset+1); win->容器[win->当前_行].数据[offset]=字符; win->current_column++; win->容器[win->当前_行].size++; },pointers,realloc,Pointers,Realloc,有人能说出为什么注释行失败,而不是另一行,尽管两者都是相同的吗? 我想知道我在注释掉的代码中分配指针和重新分配它的方式是否有任何错误,您重新定位本地指针数据,并且从不更新数据结构中的.data指针字段,因此它继续指向旧的(现在已释放的)内存,在您尝试使用它时会导致损坏 添加行win->container[win->current_row].data=data到注释掉的代码,它实际上与后面的代码等效 请注意,在任何一种情况下,如果realloc失败,您都会崩溃——您应该检查失败并采取适当的措施(可

有人能说出为什么注释行失败,而不是另一行,尽管两者都是相同的吗?
我想知道我在注释掉的代码中分配指针和重新分配它的方式是否有任何错误,您重新定位本地指针
数据
,并且从不更新数据结构中的
.data
指针字段,因此它继续指向旧的(现在已释放的)内存,在您尝试使用它时会导致损坏

添加行
win->container[win->current_row].data=data
到注释掉的代码,它实际上与后面的代码等效


请注意,在任何一种情况下,如果realloc失败,您都会崩溃——您应该检查失败并采取适当的措施(可能会打印错误消息并尝试优雅地退出)。

您在谈论哪一行?整个评论部分。。。更具体地说。。。。。。。。。。。。。数据=realloc(数据,win->容器[win->当前行].size+2);是的,谢谢你的回答,克里斯。在发布这个问题两个小时后,我发现自己终于头痛了。对于这些错误检查,我会确保将它们添加到我的项目伙伴中。
void container_row_change(struct brick_win_size *win, int character)
{
    row_container *container = &(win->container[win->current_row]);
    /*int offset = win->current_column;
    char *data = win->container[win->current_row]. data;
    if(offset < 0 || offset >= win->col)
        offset = container->size;

    data = realloc(data, win->container[win->current_row].size + 2 );
    memmove(&data[offset + 1], &data[offset], (win->container[win->current_row].size  - offset + 1));
    data[offset] = character;
    win->current_column++;
    container->size ++;
   */

   int offset = win->current_column;
   if(offset < 0 || offset >= win->col)
        offset = container->size;
   win->container[win->current_row].data = realloc(win->container[win->current_row]. data,      win->container[win->current_row]. size + 2);
   memmove(&(win->container[win->current_row].data[offset + 1]), &(win->container[win->current_row].data[offset]), win->container[win->current_row].size - offset + 1);
   win->container[win->current_row].data[offset] =character;
   win->current_column++;
   win->container[win->current_row].size ++;

}