wskaźniki, naruszenie zasad ochrony pamięci

0

Witam,
Uczę się obsługi wskaźników i napisałem taki oto programik. Niestety wywołuje on błąd o naruszeniu ochrony pamięci i nie mogę znaleźć przyczyny.
Tworzę dwa wskaźniki: "s" i "u", a potem wskazuję "u" na "s", zwiększam go, żeby wskazywał na obszar pamieci w którym jest litera "I" i kiedy próbuję ją zmniejszyć dostaję błąd. Program zdecydowanie nie wykracza poza swój przydzielony obszar pamięci, nie wiem gdzie leży błąd i bardzo proszę o pomoc.

Kompilowałem go pod gcc i visual studio 2008; za każdym razem efekt był taki sam.

Pozdrawiam i z góry dziękuję

#include <cstdio>

char* s = new char[];
char* u = new char[];

int main() {
   s = "pIec";
   u = s;
   u ++;
   printf("%c",*u); // wypisuje "I", czyli jest dobrze
   *u -= 32; /* w tej linijce program się wysypuje z komunikatem 
Unhandled exception at 0x00063800 in program.exe: 0xC0000005: Access violation writing location 0x00066969. */
   printf("%c",*u);
   return 0;
}
0
  1. new char [???ile???]
  2. u = s = "pIec"; to ustawia te wskaźniki na fragment pamięci, który nie może być modyfikowany!
  3. u = s = "pIec"; tu robisz wyciek pamięci bo tu tracisz kontakt z alokowanymi fragmentami pamięci (to przez new)
  4. a gdzie delete? jak jest new musi być delete!
0

Moze dlatego, ze tablicy "pIec" nie mozna modyfikowac ?

Sprobuj tak:

char * s = {'p', 'I', 'e', 'c'}; czy jakoś tak...

0

jak już to tak:

char s[] = "pIec";

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