• 3 odgovora
  • 2.914 pregleda
Pad programa zbog funkcije clanice klase 05.11.2013. u 06:32 · pre 157 meseci #1
Code:
void osoba::setIme(char *io)
{
     if(ime != NULL)
     {
            delete []ime;
            ime = NULL;
     }
     
     ime = new char[strlen(io)+1];
     
     strncpy(ime,io,strlen(io)+1);
     ime[strlen(io)+1] = '\0';     
}



Konstantno mi program pada zbog ove funkcije!

Ako stavim strcpy(ime, io) -> radi bez problema, ali zašto ne radi sa strncpy?

Ako bih postavio strncpy(ime, io, strlen(io)-1) radit će!!!
Zašto moram -1, kada sam već +1 naveo da će biti za -> '\0'
Re: Pad programa zbog funkcije clanice klase 05.11.2013. u 09:11 · pre 157 meseci #2
Tražiš problem na pogrešnom mestu.

Ako inicijalizuješ niz sa:

Code:
ime = new char[strlen(io)+1];


indeksi niza idu od 0, pa sve do strlen(io) (a ne do strlen(io) + 1).

U daljem kodu imaš sledeće:

Code:
ime[strlen(io)+1] = '\0';


čime adresiraš nealociran deo memorije.
Re: Pad programa zbog funkcije clanice klase 05.11.2013. u 10:15 · pre 157 meseci #3
Predstavljanje tekstualnog niza znakova sa char*, i alociranje sa new[], i kopiranje sa strcpy su sve rešenja preuzeta od starijeg brata, jezika C. Mlađi brat, C++, ima modernije i bolje rešenje - std::string. Treba njega koristiti, i sve ove muke će postati deo prošlosti, a kod će postati jednostavniji i čitljiviji. Možda ćeš naleteti na neke druge probleme, ali dugoročno gledano isplati se preći na ono što je bolje, i što je izmišljeno upravo da bi zamenilo nešto što je ranije postojalo.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme