T
TeaAge
Routinier
Hallo zusammen,
ich hab vor kurzem mit C angefangen, ist quasi meine erste Programmiersprache, da ich C für ein Projekt brauche.
Dass heißt bisher bin ich so vorgegangen (aus Zeitmangel) mir minimale Grundlagen an zueignen und mir dann aus einem C Buch immer die nötigen Befehle raus zusuchen (bin eigentlich Maschinenbauer).
Das Programm ließt im Prinzip erstmal 2 Netze (die sozusagen übereinander liegen), die aus Punkten bestehen, aus und soll zu jedem Punkt von Netz 1 den nächst gelegenen Punk von Netz 2 finden.
Zu jedem Netz gibt es also eine Datei. In jeder Zeile wird ein Punkt definiert, also Punktnummer, x-Wert, y-Wert, z-Wert.
Ein Netz besteht aus etwa 170.000 Punkten (könnten aber noch mehr werden).
Danach wird noch ein bisschen mit den Punkten hantiert, dass ist aber nicht so wichtig, den im Groben und Ganzen steht das Konzept, allerdings bekomme ich beim Ausführen immer einen "Speicherzugriffsfehler" bzw. "Segmentation fault".
Ich nehme mal an, dass die Arrays die ich definieren zu viel Speicher brauchen?
Jetzt belese ich mich gerade zu malloc(), bin mir aber nicht sicher ob es dass ist was ich brauche.
Hier mal der Anfang meines wundervollen Programms:
Das soll erstmal reichen, denn laut dem Debuuger von KDevelop bricht er mir bei der Zeile ab, in der dir char definiert werden (Zeile 14), das ist mir schon nicht klar.
Wenn ich ZEILENLAENGE auf 50 reduziere, kommt er über die Zeile weg und bleibt dann bei netz=fopen() hängen (die Datei existiert natürlich).
Wenn ich kmax auf 150.000 reduziere, läuft es soweit alles durch.
Es würde mir schon helfen, wenn ihr mir das Problem erklären könntet und mir sagt, welche Thematik ich mir mal genauer durch lesen sollte.
Gruß
TeaAge
ich hab vor kurzem mit C angefangen, ist quasi meine erste Programmiersprache, da ich C für ein Projekt brauche.
Dass heißt bisher bin ich so vorgegangen (aus Zeitmangel) mir minimale Grundlagen an zueignen und mir dann aus einem C Buch immer die nötigen Befehle raus zusuchen (bin eigentlich Maschinenbauer).
Das Programm ließt im Prinzip erstmal 2 Netze (die sozusagen übereinander liegen), die aus Punkten bestehen, aus und soll zu jedem Punkt von Netz 1 den nächst gelegenen Punk von Netz 2 finden.
Zu jedem Netz gibt es also eine Datei. In jeder Zeile wird ein Punkt definiert, also Punktnummer, x-Wert, y-Wert, z-Wert.
Ein Netz besteht aus etwa 170.000 Punkten (könnten aber noch mehr werden).
Danach wird noch ein bisschen mit den Punkten hantiert, dass ist aber nicht so wichtig, den im Groben und Ganzen steht das Konzept, allerdings bekomme ich beim Ausführen immer einen "Speicherzugriffsfehler" bzw. "Segmentation fault".
Ich nehme mal an, dass die Arrays die ich definieren zu viel Speicher brauchen?
Jetzt belese ich mich gerade zu malloc(), bin mir aber nicht sicher ob es dass ist was ich brauche.
Hier mal der Anfang meines wundervollen Programms:
Code:
/* fineloadmapper.c */
#define ZEILENLAENGE 100
#define max 100
#define kmax 170000
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main(void) {
FILE *netz, *nodeold, *cloadold, *cloadnew;
char zeile_n1[ZEILENLAENGE], zeile_n2[ZEILENLAENGE], faces[ZEILENLAENGE]="*ELEMENT,TYPE=STRI65,ELSET=faces_impact", node[ZEILENLAENGE]="*NODE", zeile3[ZEILENLAENGE], zeile2[ZEILENLAENGE], zeile1[ZEILENLAENGE], zeile[ZEILENLAENGE];
int e, ke[5], kf[kmax], kn, k_old, k_new, kez[kmax][5], l, i, kc, kfz, k[kmax], n;
double x, y, z, dx, dy, dz, betrag, betrag_neu, basisx, basisy, basisz, C[kmax][3];
netz=fopen("Impact_complete_unclean.inp","r");
fgets(zeile_n1,ZEILENLAENGE,netz);
for(i=0;i<kmax;i++);
{
kez[i][1]=0;
}
while(strncmp( node, zeile_n1, 5) != 0)
{
fgets(zeile_n1,ZEILENLAENGE,netz);
}
fgets(zeile_n1,ZEILENLAENGE,netz);
// Alle Knoten mit ihren Koordinaten in Arrays (k[kn]=Knoten, C[kn][1]=X-Koordinate des Knoten k, ...) schreiben
while(strncmp( node, zeile_n1, 1) != 0)
{
sscanf(zeile_n1,"%i, %lf , %lf , %lf ", &kn, &x, &y, &z);
k[kn]=kn;
C[kn][1]=x;
C[kn][2]=y;
C[kn][3]=z;
fgets(zeile_n1,ZEILENLAENGE,netz);
}
...
Das soll erstmal reichen, denn laut dem Debuuger von KDevelop bricht er mir bei der Zeile ab, in der dir char definiert werden (Zeile 14), das ist mir schon nicht klar.
Wenn ich ZEILENLAENGE auf 50 reduziere, kommt er über die Zeile weg und bleibt dann bei netz=fopen() hängen (die Datei existiert natürlich).
Wenn ich kmax auf 150.000 reduziere, läuft es soweit alles durch.
Es würde mir schon helfen, wenn ihr mir das Problem erklären könntet und mir sagt, welche Thematik ich mir mal genauer durch lesen sollte.
Gruß
TeaAge