Zrzut pamięci.

0

Witam! Chcę stworzyć program, który będzie czytał liczby z pliku z liczbami losowymi podanego przy wywołaniu programu i obliczał ich średnią arytmetyczną. W obecnej formie programu, przy próbie wywołania go z jakimkolwiek plikiem liczb losowych, otrzymuję komunikat "Naruszenie ochrony pamięci (zrzut pamięci)". Chciałbym dowiedzieć się, gdzie odwołuję się do pamięci, do której nie mam dostępu?
Kod:

#include <stdio.h>
#include <math.h>

int
main(int argc, char *argv[])
{
        FILE           *in = argc > 1 ? fopen(argv[1], "r") : stdin;

        if (in != NULL) {

                double r[10000000];
                double sum=r[0];
                int n = 1;

                while (fscanf(in, "%lf", &r[n]) == 1) {
                        sum+=r[n];
                        n++;
                }

                fclose(in);
                printf("\twartosc srednia = %g\n", sum/n);
                return 0;
        } else
                return 1;
}
0

Robisz ogromną tablicę na stosie, to pewnie wywala ci program. Do wykonania tego zadania jest ci ona kompletnie zbędna, ale gdybyś takiej potrzebował to powinieneś zaalokować pamięć dynamicznie (malloc w C, std::vector w C++).

Przy okazji:

double r[10000000];
double sum=r[0];

Jaka jest wartość sum? Nie możesz odczytywać wartości niezainicjalizowanych obiektów.

0

kq: dzięki za pomoc, nieprzypisanie wartości sum było problemem!

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