gpt4 book ai didi

c++ - 正在释放的指针未分配,即使它之前已分配

转载 作者:行者123 更新时间:2023-11-27 22:48:00 24 4
gpt4 key购买 nike

我有错误说对象 0x7ffbaf002000 错误:未分配正在释放的指针。但是我已经打印出内存地址,它确实是在函数 allocFlights(Flight**, int) 之前在 0x7ffbaf002000 分配的。当 flight[0] = (Flight*) malloc(sizeof(Flight) * 60) 时在循环内.所以我在 std::cout << flight[0] << std::endl 处打印出内存地址在函数中 deAllocFlights(Flight**, int)查看它是否存在并且它存在于循环内的 0x7ffbaf002000

我不明白为什么我有这个问题。我还是 C++ 的新手。

这是飞行结构:

typedef struct {
int flightNum;
char origin[20];
char destination[20];
Plane *plane;
}Flight;

void getAllFlights(Flight **flight) {
FILE *file = fopen("reservation.txt", "r");
int i = 0, totalFlights;

if(file == NULL)
{
perror("Error in opening file");
}

fscanf(file, "%d\n", &totalFlights);
*flight = (Flight*) malloc(sizeof(Flight*) * totalFlights);


allocFlights(flight, totalFlights); // Allocate here
.
.
.
deAllocFlights(flight, totalFlights); // Error: Deallocate here
fclose(file);
}

函数 allocFlights

void allocFlights(Flight **flight, int totalFlights) {
for (int i = 0; i < totalFlights; i++) {
flight[i] = (Flight*) malloc(sizeof(Flight) * 60);
std::cout << flight[i] << " " << i << std::endl; // Print out memory address
}
}

函数deallocFlights

void deAllocFlights(Flight** flight, int totalFlights) {
for (int i = 0; i < totalFlights; i++) {
std::cout << flight[i] << " " << i << std::endl; // Print out memory address
free (flight[i]);
}
}

主要:

int main() {
Flight *flight;
getAllFlights(&flight);
free(flight);
return 0;
}

最佳答案

您两次取消分配第一次航类。所以你第二次释放它的时候,系统告诉你它还没有被分配,因为虽然它被分配了,但它也被释放了。您不需要在最后调用 free(flight);,因为您已经在 deAllocAllFlights() 中释放了所有航类。正如 David Schwartz 在评论中提到的,这是因为 flight[0]*flight 相同(或者如他所说,*(flight + 0 )).

关于c++ - 正在释放的指针未分配,即使它之前已分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41072201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com