Globalny CString i alokacja

0

cześć, sto lat nie robiłem globalnych CStringów i nie pamietam teraz; Przykład, czy tu nie będzie wycieku pamięci?

//Globallny napis
const char* napis = "napis";
\void ustawNapis(const char* n)
{
napis = n; //Czy trzeba zdealokować wcześniej tego globala?
}

int main()
{
  const char* nap = "napis2";
  ustawNapis(nap);
}

na śmierć nie pamiętam.

3

Nie będzie wycieku pamięci. Zmienna globalna trafi do sekcji .rodata - danych tylko do odczytu. Literał zostanie załadowany tak czy inaczej, więc adres literału będzie dostępny przez cały czas działania programu. Gdyby literał nie był użyty w kodzie ani razu, zostałby usunięty przez kompilator w ramach optymalizacji i nie znalazłby się w binarce
.

0

Czemu miałby być wyciek, nie Alokujesz nowej pamięci na stercie (brak malloc), Dostajesz automatic storage, która nie wymaga deallokacji.

2

Nie wystarczająco dużo danych. To zależy od kontekstu.
Jeśli ustawNapis przyjmuje własność napisu, to można przekazywać napisy tylko umieszczone na stercie, bo nie jesteś w stanie odróżnić napisu na stercie od na stosie albo globalnego literału (ergo nie można go inicjalizować by wskazywał literał).
Jeśli nie przejmuje własności to free jest zbędne i to caller jest odpowiedzialny za czas życia napisu, żeby nie doprowadzić do UB.

Nieważne jaki język zmienne globalne to samo zło.

0

te właśności mnie bolały to jest tak:
Jedna binarka i w niej string => IPC => odczyt std::string => zamiana tego na const char* i ustawienie zmiennej globalnej.
I tu mnie boli własność bo jest po drodze std::string, zastanawiam sięczy po prostu nie zrobić pustej tablicy tam i nie kopiować tego cstringu tam i będzie spokój.
A soft napisano jak napisano. zamykamy temat :)

3

Jakich fragmentów tego kodu jesteś właścicielem?
Jeśli jesteś właścicielem ostatnich części: odczyt std::string zamiana tego na const char* ustawienie zmiennej globalnej
To czemu sobie utrudniasz życie mieszajac C i C++ w ten sposób?
Szczerze nienawidzę kodu C++ pisanego w stylu C. Ta mania mieszania C i C++ wynika ze złego nauczania C++.

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