Dynamiczna alokacja tablicy

0

Witam, wiem że dynamiczną tablicę można utworzyć operatorem new, i potem posługiwać się nią poprzez wskaźniki. Ostatnio na lekcji nauczyciel jednak pokazał mi coś innego, mianowicie coś w stylu:

int i;
int tab[i];

wole jednak wszystko ogarniać w domu, a zapomniałem zgrać programu i teraz jestem w dupie bo akurat by mi się to przydało. Dynamiczna alokacja z możliwością używania po prostu nazwy tablicy wydaje się być bardzo wygodna. Zwracam się do was z pytaniem, czy istnieje możliwość takiej deklaracji tablicy?

dodanie znacznika <code class="cpp"> - fp

0
int i;
cin>>i;
int tab[i];

Tylko dla C99.

C++ ma dwa odpowiedniki:

  1. int i;
    cin>>i;
    int *tab=new int[i];
  2. int i;
    cin>>i;
    vector<int> tab(i);

    W tym przypadku możesz łatwo rozszerzyć: tab.resize(2*i);

0

Obecnie używam metody pobierania w trakcie programu 2 liczb (2 wymiarów). Mnożę je przez siebie otrzymując jedno wymiarową tablicę. Tablica ta ma jednak pewne ograniczenia, przykładowo przy pobranych liczbach 400 oraz 400 wywala błąd. Zatem czy tablica utworzona operatorem new, albo vector mają podobne ograniczenia ?

0
Marines Poland napisał(a):

Tablica ta ma jednak pewne ograniczenia, przykładowo przy pobranych liczbach 400 oraz 400 wywala błąd.
Totalna bzdura, zwyczajnie coś robisz nie tak, no chyba że kompilujesz na 16-bitowym kompilatorze z poprzedniego wieku.

0

A czy crash może być spowodowany brakiem pamięci ?

Mamy 4 tablicę x[ a * b ];
gdzie a oraz b == 400;

po umieszczeniu w komentarzu momentu tworzenia jednej z nich wszystko działa poprawnie. Program działa tylko i wyłącznie gdy tworze 3 takie tablicę, na 4 jak by nie miał już miejsca.

0

Chrzani waść: http://ideone.com/jiPQN7

0

Przykro mi, ten kod który mi wysłałeś również nie działa poprawnie, program się crashuje.

1

@Marines Poland możliwe jest że twój kompilator / IDE ma ustawiony bardzo mały stos, chociaż 4004004 = 160000*4 = 640 000 bajtów = 640kb i to jest bardzo mało, ale nie jest to niemożliwe. Moze faktycznie kompilujesz jakimś 30 letnim kompilatorem? :D
Ale jeśli chodzi o twoje pytanie: nie, vector / dynamiczna alokacja nie mają takiego ograniczenia. Ale jeśli to jest 16 bitowy kompilator to ograniczeniem będzie liczba komórek pamięci które można zaadresować czyli mniej niż 2^16 bajtów...

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