Program przestał działać

0

Witam jestem kompletnie nowy na forum, jak i w swiecie programowania.
Otoz do domu dostalem nastepujace zadanie, ktore brzmi :
4. Napisz program, który obliczy sumy odpowiadających sobie elementów dwóch tablic jednowymiarowych A, B wypełnionych liczbami losowymi z zakresu od zera do wartości podanej przez użytkownika, a następnie wpisze je do tablicy C i wyświetli na ekranie.

Oto kod :

#include<iostream>
#include<time.h>
#include<cstdlib>

using namespace std;
int main ()
{
	int x,i,y,z,j;
	int tab,a[x],b[x],c[x];
	cout<<"Podaj rozmiar tablic a i b"<<endl;
	cin>>x;
	cout<<endl;
	cout<<"Podaj zakres losowanych liczb"<<endl;
	cin>>j;
	cout<<endl;
	srand(time(NULL));
	for(i=1;i<=x;i++)
	{
	y=rand()%j;
	a[i]=y;
	z=rand()%j;
	b[i]=z;
	
	c[i]=a[i]+b[i];
	cout<<"Elementy tablicy c -   "<<c[i];
    }
    cout<<endl;
	return 0;
}

Po skompilowaniu i uruchomieniu, wyskakuje komunikat : "Program przestał działać."
Nie mam pojecia skad sie to wzielo. Uzywam deva 5.7.1 i systemu Windows 7 home premium.

1

No to powiedz mi :

    int x,i,y,z,j;
    int tab,a[x],b[x],c[x];

Tablice o jakim rozmiarze właśnie utworzyłeś?
Bo rozumiesz że zapis int a[x] powoduje utworzenie tablicy O rozmiarze x? A ile wynosi x w chwili kiedy tworzysz tablicę?

2

Co wg. Ciebie robi ten kod:

    int x,i,y,z,j;
    int tab,a[x],b[x],c[x];

Podpowiedź: to nawet nie jest poprawny C++. Dodatkowo jest to undefined behavior.

0

W C++ nie wolno deklarować tablic o nieznanym rozmiarze (w chwili kompilacji):

 int a[x]

istnieją kompilatory, które mają takie rozszerzenie, ale lepiej uczyć się standardowego języka. Poza tym tu jest poważny bug, bo jaka jest wartość x?
Najlepszym rozwiązaniem tutaj jest korzystanie z std::vector.

0

Fatalna pomylka w moim wykonaniu... Przepraszam za taki glupi blad, ktorego nie zdolalem zauwazyc.
Po zadeklarowaniu x zmienilem kolejnosc wykonywania polecen w programie. W tej chwili uzytkownik najpierw wpisuje "x", a nastepnie deklaruje tablice z wartoscia podana wyzej, tak jak byc powinno.

Dziekuje za pomoc!

0

http://stackoverflow.com/questions/5377411/non-const-declaration-of-array

korzystasz tutaj prawdopodobnie z gcc extension, co nie jest częścią standardu == powinieneś takich rozwiązań unikać

edit
możesz użyć std::vector, który sobie sam poradzi z dynamiczną alokacją wartości

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