Generowanie macierzy CRS - problem z 64bit

0

Problem pojawia się tylko i wyłącznie w komputerach z systemem 64 bitowym (sprawdzane tylko na linuxie - 2xUbuntu 9.04, Debian 5.0.1).
Na systemach 32bit wszystko działa dobrze (Ubuntu 8.04, Fedora 10 albo 9, Debian 4.0).

Problem występuje z 48 linijką:

col_ind[wskaznikWart++]=j+1;

Cały kod:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <memory.h>
#include <string.h>

/* globalny typ macierzy i danych z nia zwiazanych */
#define ownedTyp float
int n=10, m=9, k=3;
bool zapisac=true;		//zapisac wyniki do pliku?

/* zmienne */
ownedTyp** macierz;
ownedTyp* wektor;
ownedTyp* y;
ownedTyp* z;
int wskaznikWart=0;
int wskaznikKol=0;
ownedTyp* valu;
int* col_ind;
int* row_ptr;

/* uzywane funkcje */
ownedTyp losujNormalne();
void macierzA(int n, int m, int k);
void generujCRS();
void zapiszCRS(char* _nazwa);
void zapiszMacierz(char * _nazwa);


/* losowanie wartosci */
ownedTyp losujNormalne() {
    return ( rand()%(int)((1./2.)*(10000.)) )/(10000.);
}

/* generowanie macierzy w postaci zapisu CRS */
void generujCRS() {
    int i,j;
    valu = new ownedTyp [m*n];
    col_ind = new int [m*n];
    row_ptr = new int [m+1];
    
    for (i=0;i<n;i++) {
        row_ptr[wskaznikKol++]=wskaznikWart+1;
        for(j=0;j<m;j++) {
            if ( macierz[i][j]!=0 ) {
                valu[wskaznikWart]=macierz[i][j];
                col_ind[wskaznikWart++]=j+1;		//zarazona linijka
            }
        }
    }
    row_ptr[wskaznikKol++]=wskaznikWart;
}

/* zapis macierzy CRS do pliku */
void zapiszCRS(char* _nazwa) {
    int i;
    
    FILE* fw;
    fw=fopen(_nazwa,"w");
    fprintf(fw,"val: ");
    for (i=0; i<wskaznikWart; i++) {
        fprintf(fw,"%3.5lf\t", valu[i]);   
    }
    fprintf(fw,"\ncol_ind: ");
    for (i=0; i<wskaznikWart; i++) {
        fprintf(fw,"%d\t", col_ind[i]);   
    }
    fprintf(fw,"\nrow_ptr: ");
    for (i=0; i<wskaznikKol; i++) {
        fprintf(fw,"%d\t", row_ptr[i]);   
    }
    
    fclose(fw);
}

/* zapis macierzy normalnej do pliku */
void zapiszMacierz(char * _nazwa) {
    FILE* f;
    f=fopen(_nazwa,"w");
    
    for(int i=0;i<n;i++) {
        for(int j=0; j<m; j++) {
            fprintf(f,"%3.5f\t",macierz[i][j]);
        }
        fprintf(f,"\n");
    }
    
    fclose(f);
}

/* generowanie macierzy rzadkiej NxM elementowej */
void macierzA() {
	
	int i,j;
	int wybrano;
	int miejsce;
	macierz = new ownedTyp* [n];
    
    for(i=0;i<n;i++) {
       macierz[i] = new ownedTyp [m];
       memset(macierz[i],0,m*sizeof(ownedTyp));
    }
	
    for(i=0;i<n;i++) {
        wybrano=0;
        while ( wybrano!=k )  {
            do {
                miejsce = rand()%(m-1);
            } while(macierz[i][miejsce]!=0);
            macierz[i][miejsce] = losujNormalne();
            wybrano++;
        }
    }
    
    generujCRS();
    if (zapisac==true) {
		char file[] = "macierz-CRS.txt";
		zapiszCRS(file);
		char file2[] = "macierz.txt";
		zapiszMacierz(file2);
	}
}


/* podzial wierszowy cykliczny - CRS */
int main() {
  
  macierzA();
		  
  return 0;
}

Ktoś może wie co jest nie tak?

PS.
Problem występuje z inkrementacją tej zmiennej. Ale jak go obejść to dalej nie wiem... .

0

mam problem ze zrozumieniem Twojego problemu
wiesz moze co jest nie tak?

PS.
problem wystepuje w opisie. brakuje chocby informacji co sie (nie) dzieje, do czego doszedles (..)

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