błąd wykonania

0

Witam nie wiem dlaczego po dobrym skompilowaniu mam błąd wykonania i program od razu się wyłącza. Zadanie ze strony:

 http://main.edu.pl/pl/user.phtml?op=showtask&task=zie&con=PAS
#include <iostream>
using namespace std;
 
double funkcja(double x, double y)
{
        return (x*y);
}
 
 
int main()
{       
        int ig, z;
        double gat[ig];
        int gatunek;
        double wynik = 0;
        double ilosc;
        
        cin >> ig >> z;
                
        for(int i = 0; i < ig; i++)
        cin >> gat[i];
        
        for(int i = 0; i < z; i++)
        {
                cin >> gatunek >> ilosc;
                double j = gat[gatunek-1];
                wynik = wynik + funkcja(j , ilosc);
        }       
        
        int k = wynik;
        cout << k; 
        return 0;       
}
0

Na pierwszy rzut oka:

        int ig, z;
        double gat[ig];

ig może być równe zero lub zawierać śmieci (np.wartość 1230976).
Poza tym tablice dynamiczne należy tworzyć używając new.

0

jak kompilujesz u sibie to dostajesz ostrzeżenia. Zastosuj się do nich, kod ma się kompilowć bez ostrzeżeń.
Pierwsze co mi się rzuca w oczy to "double gat[ig];" ile ta tablica ma elementów? Tego nie wie nikt bo ig ma nieokreśloną wartość.

edit: patryk był szybszy :)
dodatkowo zauważ, że ig według zadania może mieć wielkosć 106</suP>. A to oznacza, że chcesz mić na stosie coś co jest za duże - to jest kolejny błąd.

0

Dzięki za pomoc. Przeniesienie definicji tablicy niżej usunęło błąd wykonania. Co do przepełnienia stosu to - jeszcze chyba nie przerobiłem tego działu.

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