Witam. Czy poniższe zapisy wywołują domyślnie operator new??
char *tekst1 = "test1"
char *tekst2 = "test2"
Witam. Czy poniższe zapisy wywołują domyślnie operator new??
char *tekst1 = "test1"
char *tekst2 = "test2"
Nie, niby czemu? o_O
To są stałe wiec są na sztywno wstawiane w odpowiednie miejsce w pamieci w trakcie uruchamiania programu.
W programie, miałem coś takiego.
Zdeklarowałem sobie kilka zmiennych globalnych:
char *tekst1 = "test1";
char *tekst2 = "test2";
Następnie w programie głównym napisałem:
delete []tekst1;
tekst1 = new char[strlen(temp)+1];
strcmp(tekst1, temp);
delete []tekst2;
tekst2 = new char[strlen(temp)+1];
strcmp(tekst2, temp);
Przy zwalnianiu pamięci dla tekst2 otrzymuje błąd.
Żeby coś zwolnić przez delete[] to musisz to najpierw zaalokować przez new[]. Ty wbijasz literały stringowe, więc próbujesz zwolnić coś, co raczej się do zwalniania nie nadaje.
OK, dzięki za pomoc. Myślałem, że instrukcje z pierwszego postu domyślnie wywołują operator new (pomyliłem się). Gdy przydzielam pamięć operatorem new w konstruktorze wtedy wszystko działa prawidłowo.