const rozmiar przy operatorze new?

0
  size_t n;
  cin>>n;
  int **wyniki = new int[log(2, n)][(int)ceil(n/2.)];

Mógłbym wiedzieć dlaczego to skutkuje

błąd:array size in operator new must be constant
   int **wyniki = new int[log(2, n)][(int)ceil(n/2.)];
                                                    ^
0

Funkcja ceil nie jest wykonywana w czasie kompilacji, więc kompilator nie wie jak dużą tablicę przydzielić

1

Bzdury. O to chodzi w operatorze new
http://ideone.com/X9Q3qI

3
pingwindyktator napisał(a):

Bzdury. O to chodzi w operatorze new
http://ideone.com/X9Q3qI

A jednak nie bzdury, polecam lekturę biblii (§ 5.3.4/6):

Example: given the definition int n = 42, new float[n][5] is well-formed (because n is the expression of
a noptr-new-declarator ), but new float[5][n] is ill-formed (because n is not a constant expression). —end
example

1

Zauważ, ze T[][] to tablica tablic.
http://ideone.com/9MylLc
Trzeba to też usuwać delete[] w odpowiedni sposób.

4

Ja podejrzewam, że OP chce alokować wielowymiarową dynamiczną tablicę za pomocą new a tego się nie da zrobić w ten sposób.

Przy takim zapisie new[n][X]; tylko n może być nieznane, reszta musi być znana, bo to wymiary statycznej tablicy. To co zwróci new będzie typu int(*)[X] - wskaźnik na tablicę X intów i tych tablic będzie n.

0

@pingwindyktator, po pierwsze nie ma czegoś takiego jak T[][], po drugie za pomocą serii new zrobiłeś tablice tablic zaś to o czym mówi @kq czyli:

   int (*T)[5]=new int[n][5];

to nie jest tablica tablic zaś przydzielona dynamicznie tablica dwuwymiarowa.
http://ideone.com/EwCxC5

1

Tak, ale co z tego, skoro OP chce tablice o dwoch wymiarach nie-const? Macie racje, ale to nic nie wnosi do temtu, bo nie w tym problem. Zatem jedyne rozwiązanie to stworzenie tablicy wskaźników, pod ktore poźniej wrzucamy tablice.

1

Zastanów się nad:

  size_t n;
  cin>>n;
  size_t Cols=(n+1)>>1,Rows=(size_t)ceil(log(2,n));
  int *Tb=new int[Rows*Cols];
  for(size_t y=0;y<Rows;++y,cout<<endl) for(size_t x=0;x<Cols;++x) cout<<' '<<(Tb[y*Cols+x]=(y+1)*(x+1));
0

@Endrju to ma się nijak do mojego problemu
@pingwindyktator o to mi chodziło, dzięki wielkie :)

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