Wskazniki a kopie

0

Witam. Mam mały problem ze zrozumieniem pewnych kwestii. Powiedzmy, że mam std::string str, którego przekazuje do funkcji

static std::vector < std::string > split(const char * napis, const char * ograniczniki = "\n\t " ) {
        std::vector < std::string > podzielony_napis;

        char * n = new char[strlen(napis) + 1];
        strcpy(n, napis);

        for( char * pch = strtok( n, ograniczniki ); pch != NULL; pch = strtok( NULL, ograniczniki ) )
             podzielony_napis.push_back( pch );
        
        delete [] n;    
        return podzielony_napis;
    } 

w środku robię kopię napisu, a na końcu funkcji usuwam tę kopię. Dlaczego w wektorze znajdują się te wartości, które z "n" usunąłem, skoro w for on tworzy wskazniki i odwołuje się do tych wartości?

0

Gdyż strtok nie tworzy kopi!!! Czytać co robi funkcja!

0

Gdzie cokolwiek usunąłeś z n ?

2

W wektorze trzymasz std::string, a nie char*, więc w momencie dodania do wektora tworzony jest obiekt std::string, który kopiuje ten cały C-string do własnej pamięci.

A w ogóle za używanie char*, new[], strcpy powinieneś dostać karę chłosty i ban na dostęp do kompilatora.

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