about "operator new"
5 отговора
256 прегледа
about "operator new"
/* zdraveite, znachi sega dokato se muchih (za moite vuzmojnosti
) nad edna programa zabeliazah slednoto:
int sizebuff = std::cin.gcount();
char* pChrs = new char[sizebuff];
std::cout<<sizebuff<<" - "<<pChrs;
operator new mi allocira nejelan ot mene broi pozicii v pametta naprimer ako sizebuff = 1; then izhodut spored 'cout' e 7 znaka, ako puk sloja poveche naprimer
sizebuff = 2; then izhodut e 9 znaka i prochee.
Interesuva me tova na kakvo se dulji - greshno zaiaviavam miastoto ili niakakva harakteristika na new za koiato neznam
*/
int sizebuff = std::cin.gcount();
char* pChrs = new char[sizebuff];
std::cout<<sizebuff<<" - "<<pChrs;
operator new mi allocira nejelan ot mene broi pozicii v pametta naprimer ako sizebuff = 1; then izhodut spored 'cout' e 7 znaka, ako puk sloja poveche naprimer
sizebuff = 2; then izhodut e 9 znaka i prochee.
Interesuva me tova na kakvo se dulji - greshno zaiaviavam miastoto ili niakakva harakteristika na new za koiato neznam
*/
Re: about "operator new"
choveko, wzemi edna kniga i nauchi ASCII-Z stringovete - i togava se vurni.
C/C++ standartnite stringove zawurshwat s 0 otzade, i po tova se razpoznawa kraja im. Nauchi go tova neshto - i togava pitaj pak.
To err is human
To stderr is inhuman
C/C++ standartnite stringove zawurshwat s 0 otzade, i po tova se razpoznawa kraja im. Nauchi go tova neshto - i togava pitaj pak.
To err is human
To stderr is inhuman
inintialization
Znach ako naprimer ia iniaciliziram s neshto
vmesto zadeleni 9 kletki shte imam zadeleni naprimer tri(pri sizebuff = 3)?
vmesto zadeleni 9 kletki shte imam zadeleni naprimer tri(pri sizebuff = 3)?
terminating null
/* Znachi naprimer:
...
char* pStr = new char[10+1];
pStr[5] = '\0';
...
//izhodute shte e da rechem:
01234
i ot "kilercheto" shte sum zagrabil samo 5 znaka ostanalite sa svobodni
t.e. niama da bude darechem slednoto :
*pStr == {'0', '1', '2', '3', '4', '\0', '6', '7', '8', '9', '\0');
*/
...
char* pStr = new char[10+1];
pStr[5] = '\0';
...
//izhodute shte e da rechem:
01234
i ot "kilercheto" shte sum zagrabil samo 5 znaka ostanalite sa svobodni
t.e. niama da bude darechem slednoto :
*pStr == {'0', '1', '2', '3', '4', '\0', '6', '7', '8', '9', '\0');
*/
Re: terminating null
За изходът си прав - горе-долу такъв ще бъде, но разсъждението, че си заграбил само 5 знака, а останалите са свободни, не е. Ти си заграбил всичката памет, която си заявил. Ако си казал, че искаш 11 байта, са ти дадени 11 байта. А това, че ти оползотворяваш само 6 от тях, си е твоя работа. Но в първата програма, която беше написал, ти заделяш няколко байта, но след това потока, в търсене на нулевия байт, излиза извън тези няколко байта. В твоя случай програмата просто извежда нещо грешно, но със същия успех утре може да предизвика изключение.