char * test
9 svar · 469 visningar · startad av tosses
pekare till char namnged test?
Vet inte :P
Det är en deklaration av en pekare till en adress (ej definierad) i minnet. Då det är av typen char som deklareras så blir storleken för aritmetiken 1 byte. Hade det varit en int *, skulle storleken för aritmetiken vara 4 bytes. (Med aritmetiken avser jag hur kompilatorn i senare kod behandlar pekaren. Vidare kan storlekarna på typerna variera beroende på plattform)
Så om jag fattar rätt så anges ett minnseutrymme på 1 byte för variabeln test av typen char.
Håller c koll på så att inte andra variabler osv skriver över minnesutrymmet?
Och vad händer i fall man gör så här:
char * test = "";
cout<<"Skriv massor!: ";
cin>>test;
I C/C++ får du aldrig hjälp med att hålla koll på om någon skriver i ditt minnes område.
Jag vet inte exakt vad som händer i ditt exempel, men jag antar att test kommer att bli 1 byte stor så du kommer bara att kunna skriva in en byte, men eftersom detta är C++ så kommer du utan problem att kunna skriva in ännu fler men då finns ju självklart risken att du skriver över annat minne som är allokerat av andra variabler.
När du arbetar med pekare så använder du new/delete för att skapa utrymme och frigöra utrymme för dem.
/Viktor
I mitt förra exempel så krachar programmet.
Och antagligen är det det du nämner angående risken att skriva över osv..
Det är stacken som skrivs över i ditt exempel. Det är dock inte alltid man har sån tur att programmet kraschar utan felet kanske inte uppdagas förräns i speciella situationer. Det är då man är kompis med debuggern... men ivf så måste man vara nogrann med pekare så slipper man överraskningar.
Om man skall vara nog! :)
PeW skrev:
Då det är av typen char som deklareras så blir storleken för aritmetiken 1 byte. Hade det varit en int *, skulle storleken för aritmetiken vara 4 bytes.
Storleken för aritmetiken för char är sizeof(char), motsvarande för int är sizeof(int).
Kan vara bra att hålla detta i minnet speciellt om man börjar hantera 2bytes char (WCHAR i windows) och Unicode.
tack för alla svar !! Jag kan tyvärr inte klicka i Acceptera som slutgiltigt svar eftersom jag accepterar allt som slutgiltiga svar:)
Acceptera det du nyss skrev själv då ;)