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!