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

Dlaczego powoduje mi błąd

VPS Starter Arubacloud
0 głosów
241 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ź 345 wizyt
pytanie zadane 4 kwietnia 2019 w C i C++ przez Kaper99 Użytkownik (660 p.)
0 głosów
1 odpowiedź 544 wizyt
pytanie zadane 11 czerwca 2016 w C i C++ przez Sinnley Stary wyjadacz (12,810 p.)

92,977 zapytań

141,940 odpowiedzi

321,182 komentarzy

62,303 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...