Może standard na to nie pozwala, ale większość kompilatorów to przełknie. To nie tutaj leży problem.
Masz “int[c] w,” a potem w pętli for “int w_[cw]” (nazwijmy je w2). Pomijając, że w jest tablicą jednowymiarową, a w2 dwu, w każdej iteracji fora tworzysz nowe w2, a po wczytaniu wiersza, niszczysz. Deklarowane zmienne na stosie (np. int tab[10]) giną przed powrotem z funkcji lub wyjściem z bloku instrukcji (for, while, {}). To chyba tak powinno wyglądać._
#include
#include
using namespace std;
int main()
{
int c, cw;
cin>>c;
int *w[c];
for(int i=0; i
cin>>cw;
w[i] = new int[cw];
for(int j=0; j
cin>>w[i][j];
}
}
cin.ignore();
getchar();
/* wypisz sobie */
/* zwalniamy dynamicznie zaalokowaną pamięć */
for(int i=0; i
delete[] w[i];
/* zauwaz, ze nie dealokujemy tablicy w */
return 0;
}
sizeof mówi, ile bajtów zajmuje typ lub obiekt. Kompilujesz na 32 bitową architekturę, więc int ma 4 bajty. *int to wskaźnik. Czasem reprezentuje sobą tablicę, a czasem pojedynczy obiekt - nieważne. Wskaźnik (nieważne na jaki typ), to tak na prawdę ‘unsigned int’, a NULL == 0. tab2 jest już tablicą i wiadomo o tym w czasie kompilacji.
#include
using namespace std;
int main()
{
int n;
cin >> n;
int *tab1 = new int[n];
int tab2[n];
cout << sizeof(tab2) / sizeof(int);
cin.ignore();
getchar();
return 0;
}
Taki kodzik działa bez problemu… Dla tab2. A co z tab1? Nijak nie mogę pobrać rozmiaru bajtowego…