Alokacja i dealokacja

0

Mój kod:

#include "pch.h"
#include <iostream>

bool alloc(int ***piTable, int iSizeX, int iSizeY) {
    if (iSizeX <= 0 || iSizeY <= 0) {
        std::cout << "Negative size";
        return false;
    }

    *piTable = new int*[iSizeX];
    for (int ii = 0; ii < iSizeX; ii++) {
        (*piTable)[ii] = new int[iSizeY];
    }
    return true;
}


bool dealloc(int ***piTable, int iSizeX, int iSizeY) {
    if (iSizeX <= 0 || iSizeY <= 0) {
        std::cout << "Negative size";
        return false;
    }

    for (int i = 0; i < iSizeX; i++) {
        delete piTable[i]; //!!! there is an exception
    }
    delete piTable;
    return true;
}


int main() {
    int **piTable;
    alloc(&piTable, 5, 3);
    dealloc(&piTable, 5, 3);

    return 0;
} 

Dostaję błąd:

Exception thrown at 0x55E8D9CB (ucrtbased.dll) in zad2.exe: 0xC0000005: Access violation reading location 0xCCCCCCBC

Co powinienem poprawić?

1

Rozumiem, że to jest trening, bo na produkcji byś tego nie napisał?

int ***piTable - dealokacja powinna przyjmować int **, albo delete (*piTable)[i]

1

Na dodatek kodujesz jakby to było C, a używasz funkcjonalności z C++. Najwyraźniej twój nauczyciel stosuje tą najgorszą technikę uczenia C++ zaczynając od C.

1 użytkowników online, w tym zalogowanych: 0, gości: 1