Witam,
napisałem program na zaliczenie. Ma on za zadanie wygenerować 100, 1000, 10000, 100000 i 1000000 liczb losowych typu double w oddzielnych plikach i zmierzyć czas generowania, odczytu i zapisu oraz przedstawić to w formie tabeli.. ale do rzeczy..
program na tablicy statycznej działa bez zarzutów, jednak muszę go przerobić na tablicę dynamiczną (typ double). Wiele godzin szukania błędu i doszedłem do tego, że prawdopodobnie problem tkwi w nieodpowiednim zastosowaniu wskaźników przy przydziale pamięci.
Wstawiam kod:
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<fstream>
using namespace std;
main()
{
int i,j=100;
clock_t t_start;
int zestawy= 10;
float losowa= 0.0;
string nazwa = "100";
srand(unsigned(time(0)));
cout<<"rozmiar\tczas_tworzenia\tczas_pisania\tczas_czytania\n";
double *tab; /* ********************************************************** */
tab = (double*)malloc(sizeof(double*)); /* ********************************************************** */
do
{
tab = (double*)realloc(tab,sizeof(double*)*10); /* ********************************************************** */
ofstream plik_pisz;
plik_pisz.open(nazwa.c_str(), ios::out );
cout<<zestawy<<"\t";
t_start=clock();
for (i=1; i<=zestawy; i++)
{
losowa = (rand()/(double)RAND_MAX)*5;
tab[i]=losowa;
}
cout<<(float)(clock()-t_start)<<"\t\t";
for (i=1; i<=zestawy; i++)
{
plik_pisz<<tab[i]<<"\n";
}
cout<<(float)(clock()-t_start)<<"\t\t";
plik_pisz.close();
ifstream plik_czytaj;
plik_czytaj.open( nazwa.c_str(), ios::out );
t_start=clock();
for (i=1; i<=zestawy; i++)
{
plik_czytaj>>tab[i];
}
plik_czytaj.close();
cout<<(float)(clock()-t_start)<<"\t\n";
nazwa = nazwa+"0";
tab=NULL; free(tab); /* ********************************************************** */
j=j*10; zestawy=zestawy*10;
} while (j!=100000);
getchar();getchar();
}
wygwiazdkowałem problematyczne linijki kodu. Czy ktos może mi wyjaśnić, co jest źle?
Kompilator zwraca "return value 3221225477", czyli EXCEPTION_ACCESS_VIOLATION. Wykrzacza się przy zestawach 100 lub 1000, czasami przejdzie nawet dalej ale ostatecznie zawsze się wyłoży :(
stawiam wirtualne piwko!
pozdro i dzięki