• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

alokacja obiektów

Object Storage Arubacloud
0 głosów
452 wizyt
pytanie zadane 28 sierpnia 2017 w C i C++ przez Darven Użytkownik (860 p.)

Witam.

Mam kod, w którym alokuje pewną ilość obiektów, a potem przeprowadzam na nich pewne operacje na metodach. I mam problem, bo chyba nie do końca rozumiem zasady działania. W komentarzach napisałem jak ja rozumiem owy fragment kodu:

#include <conio.h>
#include "stdafx.h"
class Klasa
{
	int x;
public:
	Klasa(int xx = 0) { x = xx; }
	void stworz()
	{
		cin >> x;
	}
	void wyswietl()
	{
		cout << x << endl;
	}

};


int main()
{
	Klasa *obiekt = new Klasa[2]; // alokuje dwa obiekty

	obiekt->stworz(); //przypisuje wartosc "x" obiektowi peirwszemu
	
	obiekt++; // przesuwam wskaźnik na kolejny obiekt

	obiekt->stworz(); // przypisuje wartosc "x" drugiemu obiektowi

	obiekt = 0; // cofam wskanik do pcozatku

	obiekt->wyswietl(); // wyswietlam wartosc "x" obiektu pierwszego
	obiekt++; // przesuwam wskaznik na kolejny obiekt
	obiekt->wyswietl(); // wyswietlam wartosc "x" obiektu drugiego

	delete[] obiekt; // usuwam obiekt

	getch();
	return 0;
}

Czy ja dobrze rozumuje?? Jeśli nie, to prosiłbym o poprawienie komentarzy :D

A teraz do rzeczy. Piszę to, ponieważ kod nie działa w tym zapisie. Po podaniu wartości zmiennej obu obiektom, mam problem z ich wyświetleniem. Wyskakuje takie info: takie info

Nie mam zielonego pojęcia co jest grane. Może po prostu źle rozumiem odwoływanie się do metod klasy przez wskaźnik. Tak czy inaczej, program nie chce wyswietlic wartosci obiektow ktore podam.

2 odpowiedzi

+2 głosów
odpowiedź 28 sierpnia 2017 przez criss Mędrzec (172,590 p.)
wybrane 29 sierpnia 2017 przez Darven
 
Najlepsza
obiekt = 0; // cofam wskanik do pcozatku

Tu jest problem. Fakt cofasz do początku, ale wziąłeś ten początek troche zbyt ogólnie :D Chcesz cofnąć do początku tablicy a nie do początku pamięci w ogóle. Także w tym przypadku wystarczy, że zamienisz powyższą linie na
--obiekt;.

I jeszcze jedna sprawa: 
 

delete[] obiekt;

delete[] musi otrzymać dokładkie ten sam adres który wypluł new[]. Dokładnie ten sam adres jaki masz w obiekt w linii 22.

+1 głos
odpowiedź 28 sierpnia 2017 przez 10kw10 Pasjonat (22,880 p.)
obiekt = 0; // cofam wskanik do pcozatku

To jest to samo co:

obiekt = nullptr;

Wiec nie, nie cofasz do poczatku tylko ustawiasz wskaznik na nic. To sie chyba nazywa wyciek pamieci, choc nie jestem pewny.

Jak chcesz cofnac to uzyj poprostu --, a najlepiej korzystaj z operatora []

komentarz 28 sierpnia 2017 przez 10kw10 Pasjonat (22,880 p.)
Mozna wiedziec czemu downvote?

Podobne pytania

0 głosów
1 odpowiedź 515 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 3,171 wizyt
pytanie zadane 19 lipca 2016 w C i C++ przez JAKUBW Nałogowiec (33,470 p.)
0 głosów
1 odpowiedź 341 wizyt
pytanie zadane 25 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)

92,568 zapytań

141,424 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...