【问题标题】:Two pointers pointing to a same memory and realloc failing两个指向同一内存的指针和 realloc 失败
【发布时间】:2020-05-16 19:40:41
【问题描述】:
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 ++;

}

谁能说出为什么注释行失败而不是另一行失败,尽管两者都相同? 我想知道我分配指针并重新分配它的方式是否有任何错误

【问题讨论】:

  • 你在说哪一行?
  • 整个评论部分......更具体地说...... data = realloc(data, win->container[win->current_row].size + 2 );

标签: pointers realloc


【解决方案1】:

在注释掉的代码中,您重新分配了本地指针 data 并且从不更新数据结构中的 .data 指针字段,因此它继续指向旧(现在已释放)内存,当您尝试使用它。

win-&gt;container[win-&gt;current_row].data = data;行添加到注释掉的代码中,它实际上将等同于后面的代码。

请注意,在任何一种情况下,如果 realloc 失败,您都会崩溃——您应该检查失败并做一些适当的事情(可能打印错误消息并尝试正常退出)。

【讨论】:

  • 是的,谢谢克里斯的回答。发布此问题后两个小时后发现自己,哈哈,我确实最终还是头疼了。对于那些错误检查,请确保将它们添加到我的项目伙伴中。
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2014-08-13
  • 2015-12-08
  • 2012-03-15
相关资源
最近更新 更多