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

Dlaczego powoduje mi błąd

Object Storage Arubacloud
0 głosów
200 wizyt
pytanie zadane 7 listopada 2016 w C i C++ przez Miszo Bywalec (2,100 p.)

Dlaczego nie wypisuje mi liczb od 0 do 4, tylko mam jakieś fatal error. ;(

 

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <conio.h>
#include <time.h> 

using namespace std;



int main()
{
	int *w = new int[5];

	for (int i = 0; i < 5; i++)
	{
		*w = i;
		w++;
		
	}

	for (int i = 0; i < 5; i++)
	{
		cout<<*w;
		w++;

	}

	delete [] w;
	
	
	

	return 0;
}


 

3 odpowiedzi

0 głosów
odpowiedź 7 listopada 2016 przez draghan VIP (106,230 p.)
Po jaką anielkę Ci tyle dołączanych nagłówków? Wystarczy tutaj tylko iostream. I kto Ci pokazał inkrementowanie wskaźnika dla zwykłych operacji tablicowych? To zazwyczaj źle się kończy, czego przykładem jest właśnie Twój post. Użyj notacji indeksowania albo cofaj wskaźnik na początek tablicy po jego przesunięciu.
0 głosów
odpowiedź 7 listopada 2016 przez siof Gaduła (3,560 p.)
Chodzi o to że po pierwszej pętli będziesz już poza pamięcią tablicy w i dlatego się wywala. Możesz to poprawić na 2 sposoby. Pierwszy to przed drugą pętla cofnięcie się aż do początku tablicy (czyli 5 razy). Drugi korzystanie z w[i] zamiast operowania bezpośrednio na wskaźniku.
0 głosów
odpowiedź 7 listopada 2016 przez unknown Nałogowiec (39,560 p.)

 If the pointer passed to the standard library deallocation function was not obtained from the corresponding standard library allocation function, the behavior is undefined

Źródło: http://en.cppreference.com/w/cpp/memory/new/operator_delete

Innymi słowami: nie inkrementuj wskaźnika.

komentarz 7 listopada 2016 przez Miszo Bywalec (2,100 p.)
Tak zostało to przedstawione w kursie Mirosława Zelenta o wskaźnikach. Skoro mam nie inkrementować wskaźnika to jak mam skakać po kolejnych szufladkach tablicy? Po zatym nie nawet co tam jest napisane na tej stronie.
komentarz 7 listopada 2016 przez unknown Nałogowiec (39,560 p.)
cout<<*(w+i);
*(w+i)=i;

Odcinek Zelenta na temat wskaźników powinien zostać usunięty.

komentarz 7 listopada 2016 przez unknown Nałogowiec (39,560 p.)
Możesz użyć jeszcze operatora []

Podobne pytania

0 głosów
1 odpowiedź 332 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)
0 głosów
1 odpowiedź 478 wizyt
pytanie zadane 11 czerwca 2016 w C i C++ przez Sinnley Stary wyjadacz (12,810 p.)

92,617 zapytań

141,467 odpowiedzi

319,783 komentarzy

61,999 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!

...