Hi,
ich habe ein Problem beim Einlesen großer Datensätze.
Das Programm ist in C geschrieben und funktioniert, warum auch immer, nur auf Windows XP 32, auf Vista 32 und 64 stürzt es direkt ab. Auf XP 32 funktioniert es mit kleineren Datensätzen (so um die 20-30 Zeilen). Funktionieren soll es auf Linux (tut's das so auch?) Ich vermute mal, dass es ein Malloc()-Problem ist, weiß aber nicht, wie ich es lösen kann.
Die Speicherallozierung sieht so aus:
Die Datensätze sehen z.B: so aus:
5
5 4
4 3
3 2
2 1
.....
0 5
Wäre Euch sehr dankbar für Hilfe. =)
Liebe Grüße, D
ich habe ein Problem beim Einlesen großer Datensätze.
Das Programm ist in C geschrieben und funktioniert, warum auch immer, nur auf Windows XP 32, auf Vista 32 und 64 stürzt es direkt ab. Auf XP 32 funktioniert es mit kleineren Datensätzen (so um die 20-30 Zeilen). Funktionieren soll es auf Linux (tut's das so auch?) Ich vermute mal, dass es ein Malloc()-Problem ist, weiß aber nicht, wie ich es lösen kann.
Code:
FILE* Datensatz = fopen (argv[1], "r"); // öffnen(lesen, "r") der Datei (argv[1] = Pfad)
if ( Datensatz == NULL ) // Wenn Datei nicht vorhanden ist:
printf("Ungueltiges Eingabeformat.\n"); // Ausgabe, Abbruch
else{ // Andernfalls: Einlesevorgang beginnen
for(i=0; !feof (Datensatz); i++){ // Bis zum Dateiende Zeilenanzahl und Brueckenverbindungen einlesen/speichern
if (i==0){
fscanf(Datensatz, "%d", &Sockelanzahl);
}
else{
fscanf(Datensatz, "%d %d", &Bruecken[i-1][0], &Bruecken[i-1][1]);
}
Zeilen = i; // Anzahl der Bruecken (Anzahl der Dateizeilen - 1)
}
} // Ende einlesen
if (Datensatz != NULL){ // Falls gueltiger Datensatz: Start
fclose(Datensatz); // Datei schließen
Speicherallozierung(); // Speicher allozieren
Die Speicherallozierung sieht so aus:
Code:
void Speicherallozierung(){ // Speicherallozierung
passBr[Versuch+1][Zeilen][2] = (int*)malloc(sizeof(int)*(Versuch+1)*Zeilen*2);
Blacklist[Versuch+1][Zeilen][2] = (int*)malloc(sizeof(int)*(Versuch+1)*Zeilen*2);
Bruecken[Zeilen][2] = (int*)malloc(sizeof(int)*Zeilen*2);
BrueckenK[Zeilen][2] = (int*)malloc(sizeof(int)*Zeilen*2);
Ergebnis[Zeilen+1] = (int*)malloc(sizeof(int)*(Zeilen+1));
ManiZs[Zeilen] = (int*)malloc(sizeof(int)*Zeilen);
if(ManiZs[Zeilen] == NULL || Bruecken[Zeilen][2] == NULL || BrueckenK[Zeilen][2] == NULL || Ergebnis[Zeilen+1] == NULL || Blacklist[Versuch+1][Zeilen][2] == NULL || passBr[Versuch+1][Zeilen][2] == NULL) {
printf("Kein Virtueller RAM mehr verfügbar ...\n");
SAV = 1;
}
else {
SAV = 0;
}
}
Die Datensätze sehen z.B: so aus:
5
5 4
4 3
3 2
2 1
.....
0 5
Wäre Euch sehr dankbar für Hilfe. =)
Liebe Grüße, D
Zuletzt bearbeitet: