Tablica wychodząca poza zakres C++ Dev-C++

0

Witam.
Mam pytanie do użytkowników programu Dev-C++.
Kupiłem sobie książkę do C++ i doszedłem do miejsca gdzie jest ostrzeżenie przed przekroczeniem indeksu tablicy, iż tak jak to napisał autor, takie programy mogą załamać system.
Nie które programy z kompilatorami podobno wyłapują ten błąd i wyświetlają co jest nie tak. Jak to uaktywnić w Devie?
Mam taki program:

#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
	system("chcp 1250");
	system("cls");
		long TargetArray[25];
		int i;
		for(i=0; i<25; i++){
			TargetArray[i]=i;
		}
			cout<<"Test 1: \n";
			cout<<"TargetArray[0]: "<<TargetArray[0]<<endl;
			cout<<"TargetArray[24]: "<<TargetArray[24]<<endl<<endl;
	cout<<"\nPróba przypisania wartości poza granicą...";
	for(i=0; i<=25; i++){
		TargetArray[i]=i;
	}
	cout<<"\nTest 2: \n";
	cout<<"TargetArray[0]: "<<TargetArray[0]<<endl;
	cout<<"TargetArray[24]: "<<TargetArray[24]<<endl;
	cout<<"TargetArray[25]: "<<TargetArray[25]<<endl<<endl;
	return 0;
}

Tablica ma 25 elementów więc od 0 do 24.
pierwsza pętla jest poprawna, ale druga przecież nie. Przy TargetArray[25] powinien się wyświetlić błąd, a zamiast tego wyświetla mi liczbę, jakby nie przekroczyło zakresu tablicy.
Nie biorę pod uwagę innych programów. Dev jest dla mnie najbardziej wygodny. Reszta raczej jest zbyt rozbudowana jak dla mnie. Zaraz się gubię w nich.

2
adrian.widzew napisał(a):

Nie biorę pod uwagę innych programów. Dev jest dla mnie najbardziej wygodny. Reszta raczej jest zbyt rozbudowana jak dla mnie. Zaraz się gubię w nich.

To masz problem, bo używasz IDE z epoki kamienia łupanego.

0

A jakiś jest program bardzo podobny do Deva? Tylko nie Code-Blocks i nie Visual

0

Hey, widze ze inkwizytor dal bardzo "pomocną" odpowiedź :P
Dev używa gcc wiec musisz zobaczyć jak to wygląda np. w kompilatorze g++. Żeby dostać warning o przekroczeniu zakresu tablicy musisz mieć włączoną optymalizacje (inaczej kompilator nie analizuje kodu wystarczająco dokładnie żeby wychwycić przekroczenie zakresu) np. użyj opcji -O2, po drugie włącz ostrzeżenia o przekroczeniu zakresu (flaga -Warray-bounds, albo wszystkie flagi z ostrzeżeniami -Wall). Musisz sam poszukać gdzie możesz ustawić opcje dla kompilatora w devie (nie pamiętam niestety gdzie to było :( ) i dopisać do tych opcji właśnie -O2 i -Warray-bounds.
Pozdrawiam :)

1
adrian.widzew napisał(a):

A jakiś jest program bardzo podobny do Deva? Tylko nie Code-Blocks i nie Visual

Orwel Dev-C++, lecz nie mam pojęcia czy/jak działa.
Btw, dlaczego nie Code::Blocks?

0

Co do IDE ja bym polecił notepad++ :)
http://notepad-plus-plus.org/
Do nauki idealne bo można się nauczyć jak używać kompilatora, większość rzeczy trzeba zrobić samemu (a jak wiadomo najlepiej się uczyć przez praktykę), a sam tylko koloruje składnię.

0

C/C++ nie sprawdzają indeksacji tablic.
Wiec możesz mieć tablicę na 3 elementy i spróbować sięgnąć do elementu o indeksie 1000 lub nawet -1000.
Dopiero system operacyjny zaprotestuje ("chodzi o komunikat 'access violation' lub segfault." - @Patryk27) na takie mazanie po pamięci o ile nie trafisz przypadkiem do dostępnego do odczytu/zapisu obszaru. Aczkolwiek w komentarzach @Patryk27 ujął to trochę lepiej.

0

A pracował ktoś na eclipse?

1

Ja kiedys uzywalem dosc krotki czas, w dosc malo skomplikowanych sprawach i zauwazylem, ze eclipse (do C++) jest swietne... jesli chodzi o marnotrawienie zasobow.

Jak chcesz zmienic IDE, to polecam:
-> KDevelop (nie mam pojecia czy jest jakas wersja windowsowa)
-> QtCreator
-> VS

ew. jak masz dosc dobra konfiguracje sprzetowa, to netbeans tez bedzie okej.

0

Posiadam system windows 7 64 bit więc potrzebuję czegoś pod tą platformę. Z Visualem jest ten problem, że błąd mi wyskakuje przy próbie instalacji, jakaś nie zgodność z moim systemem czy coś takiego

0

Ostatnio dałem szansę QtCreatorowi i przyznaję że nawet nadaje się do użytku, w przeciwieństwie do starych wersji.

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