如何修复 "Pointer being realloc'd was not allocated" 错误
How to fix "Pointer being realloc'd was not allocated" error
我有一个名为 House 的结构,它包含一个表示邻域的字符数组。我正在尝试读取房屋数据库并为具有相同街区的房屋创建一个数组。阅读部分工作正常,但是当我为一个社区创建一个新数组时,我的函数只进入循环 23 次并找到具有相同社区的前 23 个房屋并给出此错误。
pro(4740,0x10d06f5c0) malloc:* 对象 0x7ff724d00030 错误:未分配重新分配的指针
pro(4740,0x10d06f5c0) malloc: * set a breakpoint in malloc_error_break to debug
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;
}
您必须分配 来自 realloc
的 return 值。你有
realloc(newarray, sizeof(House) * counter);
你调用它的秒次(在循环中),你之前传递给它的指针已经是free
d了,但是你丢弃了新值.
newarray = realloc(newarray, sizeof(House) * counter);
理想情况下,您可以将 return 值分配给一个临时变量,这样您就可以检查 realloc
是否成功。
我有一个名为 House 的结构,它包含一个表示邻域的字符数组。我正在尝试读取房屋数据库并为具有相同街区的房屋创建一个数组。阅读部分工作正常,但是当我为一个社区创建一个新数组时,我的函数只进入循环 23 次并找到具有相同社区的前 23 个房屋并给出此错误。
pro(4740,0x10d06f5c0) malloc:* 对象 0x7ff724d00030 错误:未分配重新分配的指针 pro(4740,0x10d06f5c0) malloc: * set a breakpoint in malloc_error_break to debug
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;
}
您必须分配 来自 realloc
的 return 值。你有
realloc(newarray, sizeof(House) * counter);
你调用它的秒次(在循环中),你之前传递给它的指针已经是free
d了,但是你丢弃了新值.
newarray = realloc(newarray, sizeof(House) * counter);
理想情况下,您可以将 return 值分配给一个临时变量,这样您就可以检查 realloc
是否成功。