[ azzpoz @ 05.11.2013. 06:32 ] @
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'
[ Burgos @ 05.11.2013. 09:11 ] @
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.
[ Mihajlo Cvetanović @ 05.11.2013. 10:15 ] @
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.
[ azzpoz @ 05.11.2013. 17:16 ] @
Još uvijek učim C++, pa me zanimao i ovaj dio...

Mislim da sam razumio!