Se mando in run il programma che ho copiato in calce con 1000 utenti anziche con 100(cioè mettendo #define Nut 1000 anzichè 100) mi da questo messaggio
process returned -1073741571(0xC00000FD)
Qualcuno mi sa dire cosa devo correggere per farlo funzionare correttamente? Con 100 utenti (con #define Nut 100) funziona bene.
#include <stdio.h>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>
#define Nt 1000
#define Nut 100
using namespace std;
class Utente{
public:
Utente(){ NumeroDiTransazioni[Nut]={0};
float Reliability_value[Nut]={0};
Trust_value[Nut]={0.0};
Reputation=0.5;
cheat=false;};
void Aggiorna_reliability(int&n, float&a,float&b){//a e' il feedback, b e' il valore
Reliability_value[n]=(Reliability_value[n]*NumeroDiTransazioni[n]+pow(a,1/b))/(NumeroDiTransazioni[n]+1);
//la reliability e'uguale alla reliability vecchia moltiplicata per il numero delle transazioni precedenti
//piu' la radice valore del feed , tutto diviso il numero delle
//transazioni contando quella corrente
NumeroDiTransazioni[n]++;}
void Aggiorna_reputation(float&a,float&b,float c/*reputaz recensore,compratore*/){if (c<0.5)Reputation=Reputation*(1-pow(c,3))+a*pow(c,3);
else Reputation=Reputation*(1-pow(c,2))+pow(c,2)*a;}
void Aggiorna_trust(float a,float b,int q){Trust_value[q]=0.5*a +0.5*b;}
float get_rep(){return Reputation;}
float get_rel(int a){return Reliability_value[a];}
void imbroglione(){cheat=true;}
private:
int NumeroDiTransazioni[Nut];/*tengo conto del numero di transazioni che ogni utente ha effettuato con ciascuno degli altri*/
float Reliability_value[Nut];/*Valore di reliability*/
float Trust_value[Nut];
float Reputation;
bool cheat;
};
int main()
{ Utente V[Nut];
int A[Nt]={0},B[Nt]={0};
float C[Nt]={0},D[Nt]={0};
ifstream file400("transaction1.dat", ios::in);if(!file400){cerr<<"File Transaction.dat could not be opened"<<endl; system("pause");exit(1);}
for(int i=0;i<Nt;i++)
file400>>A[i]>>B[i]>>C[i]>>D[i];
file400.close();
for(int i=0;i<Nt;i++){
V[A[i]].Aggiorna_reliability(B[i],D[i],C[i]);
V[B[i]].Aggiorna_reputation(D[i]/*feed*/,C[i]/*valore*/,V[A[i]].get_rep()/*reputazione del compratore che recensisce*/);
V[A[i]].Aggiorna_trust(V[B[i]].get_rep()/*reputazione di B[i]*/,V[A[i]].get_rel(B[i])/*reliability di A[i] verso B[i]*/,B[i] );}
for (int i=0;i<Nut;i++)
if(V[i].get_rep()<0.5)
{V[i].imbroglione();
cout<<i<<endl;}
return 0;
}