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

alokacja obiektów

0 głosów
814 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,570 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ź 675 wizyt
pytanie zadane 12 sierpnia 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 3,545 wizyt
pytanie zadane 19 lipca 2016 w C i C++ przez JAKUBW Nałogowiec (33,470 p.)
0 głosów
1 odpowiedź 488 wizyt
pytanie zadane 25 sierpnia 2020 w C i C++ przez fortuna Początkujący (310 p.)

93,632 zapytań

142,558 odpowiedzi

323,058 komentarzy

63,141 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...