【问题标题】:How to fix "Pointer being realloc'd was not allocated" error如何修复“未分配重新分配的指针”错误
【发布时间】:2019-05-20 21:58:43
【问题描述】:

我有一个名为 House 的结构,它包含一个用于邻域的字符数组。我正在尝试读取房屋数据库并为具有相同社区的房屋创建一个数组。读取部分工作正常,但是当我为社区创建一个新数组时,我的函数只进入循环 23 次,并找到具有相同社区的前 23 个房屋并给出此错误。

pro(4740,0x10d06f5c0) malloc: * 对象 0x7ff724d00030 的错误:未分配重新分配的指针 pro(4740,0x10d06f5c0) malloc: * 在 malloc_error_break 中设置断点进行调试

typedef struct house{
  int id;
  int lotarea;
  char street[5];
  int saleprice;
  char neighborhood[10];
  int yearbuilt;
  int overallqual;
  int overallcond;
  char kitchenqual[3];
} House;



House* get_neighborhoods(House house, House* array) {
printf("Get neighborhoods of house with id %d\n", house.id);

House* temp = array;
int counter = 1;


House* newarray = malloc(sizeof(House));

if (newarray == NULL) {
    printf("Malloc error...");
}


while (temp != NULL) {
    if (!strcmp(temp->neighborhood, house.neighborhood)) {


        if (counter > 1) {
            realloc(newarray, sizeof(House) * counter);
        }

        copy_house(newarray + counter - 1, temp);
        print_house(newarray[counter - 1]);
        counter++;
    }

    temp++;
}

return newarray;

}

【问题讨论】:

    标签: c malloc realloc


    【解决方案1】:

    您必须分配来自realloc 的返回值。你有

    realloc(newarray, sizeof(House) * counter);
    

    您调用它的次(在循环中),您之前传递给它的指针已经是freed,但是您丢弃了新值。

    newarray = realloc(newarray, sizeof(House) * counter);
    

    理想情况下,您会将返回值分配给一个临时变量,这样您就可以检查realloc 是否成功。

    【讨论】:

      猜你喜欢
      • 2016-01-08
      • 2015-07-14
      • 1970-01-01
      • 2021-07-31
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      相关资源
      最近更新 更多