Witam, mam do napisania program o następującej treści:
Napisz program, który alokuje pamięć na tablicę dwuwymiarową o wymiarach 10 x 10 liczb typu int. Tablicę należy alokować partiami - jako jednowymiarową tablicę wskaźników (tablica wierszy) oraz 10 tablic liczb int (tablice danych wierszy).
Utworzoną tablicę wypełnij wartościami w taki sposób, aby zapisana w nich była tabliczka mnożenia, a następnie wyświetl ją czytelnie w konsoli tak, aby jedności liczb poszczególnych kolumn tablicy były pod sobą. Zwróć uwagę na justowanie liczb.
Wypełnianie i wyświetlanie ma odbywać się w osobnych pętlach.
W przypadku, kiedy nie uda się zaalokować pamięci program powinien wyświetlić komunikat Failed to allocate memory, zwolnić zaalokowaną wcześniej pamięć i zakończyć działanie z kodem błędu 8.
Przykładowe wyjście:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Przykładowa interakcja z programem -- brak pamięci:
Limit sterty: 420 bajtów
Failed to allocate memory⏎
Wyjaśnienie: Wysokość 10 elementów to 10 wskaźników po 8 bajtów każdy (architektura 64 bitowa). Każdy z 10 wierszy ma szerokość 10 kolumn, zatem to 10 bloków po 4 bajty każdy. Stąd 10 x 8 + 10 * 10 * 4 = 480 bajtów sterty wymagane, aby program zadziałał poprawnie. Dostępne 420 bajty są niewystarczające.
Uwagi
- W programie nie wolno korzystać z operatora []!
- Pamiętaj, że Dante działa na maszynie 64 bitowej. Oznacza to długość wskaźnika równą 8 bajtom.
Działa on poprawnie jednak testy zwracają mi taki błąd:
PORAŻKA: <strong>Wykryto uszkodzenie pamięci starty. Któraś z poprzednich operacji wyszła po za swój zakres pamięci.</strong>. Opis: Zamazany początek bloku opisującego zasób (RVE_INVALID_MAGIC1)]⏎
Byłabym wdzięczna za wszelkie wskazówki do rozwiązania tego problemu.