オブジェクト0x7ffbaf002000でエラーが発生しました:解放されたポインターが割り当てられませんでした。しかし、私はメモリアドレスをプリントアウトしています。実際には0x7ffbaf002000にallocFlights(Flight**, int)
のflight[0] = (Flight*) malloc(sizeof(Flight) * 60)
の中の関数allocFlights(Flight**, int)
に割り当てられています。だから私はこの問題を持っている理由私は理解していない私はそれがありますかどうかを確認するために機能deAllocFlights(Flight**, int)
にstd::cout << flight[0] << std::endl
のメモリアドレスをプリントアウトし、それがループ解放されたポインターが割り当てられていたにもかかわらず割り当てられていませんでした
内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;
}
1つを選択:CまたはC++。これはあなたのために多くのものを簡素化することができます。 – e0k
C/C++などの言語はありません。これはC++ –
あなたのコードは 'std :: cout << flight [i] << ...'を使うため、C++であることに注意してください。しかし、もしあなたがC++でコーディングしているのであれば、 'malloc()'と 'free()'を使うべきではありません - C++の優れた 'new'と' delete'演算子を使うべきです。すべて。 –