Wczytywanie wartości pól struktury przy użyciu wskaźnika i operatora adresu

0

Witam.
Mam takie zadania i taki kod:
Zadanie:
Napisz program definiujący zmienną typu TSamochod oraz wskaźnik do zmiennej typu TSamochod. Program powinien wczytać z klawiatury wartości pól zmiennej. Zastosuj wskaźnik i operator adresu (nie stosuj operatora new).
Kod:

#include<iostream>
#include<conio.h>
using namespace std;
struct TSamochod{
	string marka;
	int rocznik;
	int pojemnosc_silnika;
};
int main(){
TSamochod Samochod;
TSamochod *wsk=&Samochod;
cout<<"Podaj marke samochodu: ";
cin>>wsk->marka;
cout<<"Podaj rocznik samochodu: ";
cin>>wsk->rocznik;
cout<<"Podaj pojemnosc silnika: ";
cin>>wsk->pojemnosc_silnika;
cout<<"Marka: "<<Samochod.marka<<"\nRocznik: "<<Samochod.rocznik<<"\nPojemnosc silnika: "<<Samochod.pojemnosc_silnika;
delete wsk;
getch();
return 0;
}

Po odpaleniu programu na sam koniec, wyskakuje mi okienko z komunikatem:
program przestał działać poprawnie z powodu wystąpienia problemu. System Windows zamknie program i powiadomi Cię, jeśli istnieje dostępne rozwiązanie.
Czy ja zrobiłem coś źle?
Miałem wcześniej dwa bardzo podobne programy, wręcz prawie identyczne, i też takie okienko wyskakiwało, ale obecnie już mi nie wyskakuje przy poprzednich. Przy ostatnim mi wyskakuje.
Więc proszę o sprawdzenie czy kod jest dobry?

1

Nie jest dobry. Nie możesz zrobić delete na wsk. Przecież to wskaźnik do obiektu, który nie został zaalokowany za pomocą new.

0

operator delete nie kasuje obiektu wskaźnik tylko pamięć, na którą on wskazuje; jeżeli użyjesz delete na obiekcie znajdującym się na stacku to zwolnisz ją 2x;

o tym jak działa stack allocation -> http://stackoverflow.com/questions/685601/about-c-c-stack-allocation

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