programm stürzt für hohe Eingabewerte ab, warum?



  • Hallo Forum, mein Programm sieht so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef unsigned int BLOCK;
    const int BITS_PER_BLOCK = sizeof(BLOCK)*8;
    
    int N = 700;
    
    int creatematrixBPB(int *m) {
    	int row, col;
        for (row = 0; row < N; ++row) {
            for(col = 0; col < N; ++col) {
    			if(col&1)
    				(*m++) = (BLOCK)1;
    			else (*m++) = (BLOCK)0;
            }     
        }   
        return 0; 
    }
    
    int eliminateBPB(BLOCK *rstart) {
    
    	BLOCK *m = rstart;
    	int row, i;
    	for(row = 0; row < N; row++) {
    		rstart += N;
    		for (i = 0; i < row ; i++)
    		// does this block contain one(s) ?
    			if (rstart[i]) {
                    int k;
                    BLOCK *rsrc = &m[i * N];
    
                    for (k = i; k < N; k++)
                       rstart[k] ^= rsrc[k];
    
                    }
    	}
    	return 0;
    
    }
    
    int main() {
    	int NB = N / BITS_PER_BLOCK + 1;
    	BLOCK *m = malloc(N * N * sizeof(BLOCK));
    	BLOCK *rstart=m;
    	creatematrixBPB(m);
    	eliminateBPB(rstart);
    
    	return 0;
    }
    

    Der Sinn des Programms sei jetzt mal egal. Für eine Eingabe von N = 500 funktioniert das Programm noch einwandfrei und läuft auch sehr zügig ab. Doch schon bei N = 700 stürzt es ab. Problem ist offensichtlich die Funktion eliminateBPB(BLOCK *), denn ohne sie stürzt es nicht ab. Ich verstehe nicht ganz warum. Die Speicherauslastung im virtuellen Speicher beträgt bei Abbruchzeit gerade mal 4 MB!



  • Ich habe den Fehler gefunden (Z.26!) die erhöhung findet zu zeitig statt!



  • Schonmal was von free gehört? So produzierst du nur Speicherlecks.



  • Ups, naeben!
    Danke für den Tipp, hatte das garnicht bedacht!


Anmelden zum Antworten