Zrzut pamięci.

  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
#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;
}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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:

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

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.