Cześć, mam pytanie, żeby rozwiać swoje wątpliwości. Mając taki kawałek kodu wszystko działa poprawnie:
int main()
{
int tab[] = { 1,2,3,4 };
int* tab2 = new int[4];
for (int i = 0; i < 4; i++)
tab2[i] = tab[i];
for(int j = 0; j < 4; j++)
cout << tab2[j];
delete[] tab2;
}
Natomiast taki przypadek wyrzuca wyciek pamięci:
int main()
{
char tab[] = "Krab";
cout << strlen(tab);
char* tab2 = new char[strlen(tab)];
strcpy(tab2, tab);
cout << tab2;
}
Jak zmienię trzecią linijkę na:
char* tab2 = new char[strlen(tab)+1];
to wszystko działa poprawnie. I tu właśnie chciałem się dopytać, czy wynika to z faktu, że ostatnim elementem takiej tablicy znaków jest znak '\0', który świadczy o zakończeniu napisu i też trzeba zarezerwować miejsce w pamięci na ten znak?