Kod: Zaznacz cały
double* great_vector;
Kod: Zaznacz cały
if(***) {
great_vector=new double[len];
---------------
};
Kod: Zaznacz cały
cout<<great_vector<<endl;
Kod: Zaznacz cały
int w=0;
for(int i=0; i<n; i++) {
for(int j=0; j<=i; j++) {
for(int k=0; k<n; k++) {
for(int l=0; l<=k; l++) {
if((0.5*i*(i+1)+j)>=(0.5*k*(k+1)+l)) {
*(great_vector+w)=calc_2e_direct(basis_form,eff_basis,i,j,k,l,n);
if(i==j) *(great_vector+w)=*(great_vector+w)/2;
if(k==l) *(great_vector+w)=*(great_vector+w)/2;
if((i==k) && (j==l)) *(great_vector+w)=*(great_vector+w)/2;
w++;
};
};
};
};
};
Algorytm działa do pewnego momentu, kiedy proces zaczyna zajmować około 50 mb pamięci. Potem następuje segmentation fault.
Proces nie zapełnia całej pamięci ram, zostaje podczas wykonania grubo ponad 2gb. Jak uniknąć tego problemu? Jeśli następuje heap overflow to jak temu zapobiec? Jaki wydajny sposób implementacji zaproponowalibyście dla tego algorytmu.
Dodam, że len*sizeof(double), czyli rozmiar zaalokowanej pamięci ma docelowo być bardzo duży np. 4gb.