Segmentation fault bei char Aufgabe
lima-city → Forum → Programmiersprachen → C/C++ und D
aktuelle zeichen
array
byte
code
datei
eigentlichen namen
eingetragen code
einnehmen
erkundigen
file
filtern
gesamten code
kleinen fehler
null
posten
schleife
sektor
speichern
string
tun
-
Ich tüfftele jetzt schon lange an einem einfachen problem das immer ein "Segmentation fault" ausgibt:
Ich will aus einer Datei einen Namen Filtern wobei der Name in der Datei bis zu 128 Byte Platz hat Aber nur weniger einnehmen (soll).
Um das zu erreichen wird ein 128 Byte String in ein in ein char eingetragen:
char * NameRaw; fread(NameRaw, sizeof(char)*128, 1, open);
In einer While Schleife soll dann solange immer ein Zeichen in den eigentlichen Namen String getan werden bis das aktuelle Zeichen 0x00 (NULL) ist:
int i = 0; while (NameRaw[i] != 0x00) { Name[i] = NameRaw[i]; i++; }
Und bei dem "Name = NameRow" kommt immer dieser "Segmentation fault" Fehler. Ich weis das das irgendwas mit einer unmöglichen Aufgabe bei dateien bzw. Varibalen zu tun hat aber ich kann mir einfach nicht erklären wieso das so ist. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Allozierst du den Speicher für NameRaw und Name? In deinen Codeausschnitten ist davon nichts zu sehen. Könntest du deinen gesamten Code posten?
-
nikic schrieb:
Allozierst du den Speicher für NameRaw und Name? In deinen Codeausschnitten ist davon nichts zu sehen. Könntest du deinen gesamten Code posten?
Der Code stammt aus einer Header Datei zum öffnen von 3D Dateien stammt Texture Name usw. und momentan häng ich halt am Name der Dateien. Der ganze Code:
struct Object { char * Name; char * TextureName; int VertexData; int UVData; float posx; float posy; }; typedef struct Object Object; int LenOfStringArray(const char ** Array) { int i = 0; while (Array[i] != NULL) { i++; } return i; } void ParseFile(const char * File, const Object * object) { printf("%s\n", File); FILE * open = fopen(File, "r"); int i; char * NameRaw; char * Name; fread(NameRaw, sizeof(char)*128, 1, open); i = 0; while (NameRaw[i] != NULL) { Name[i] = NameRaw[i]; i++; } //printf("%s\n", Name); fclose(open); } void FileLoader(const char ** Files) { // Ermittle wie viele Dateien geladen werden müssen int FilesLen = LenOfStringArray(Files); printf("\nFileLoader:\n"); printf("- Objekte die zu laden sind: %i\n", FilesLen); const Object * Objects[FilesLen+3]; int i = 0; while (i < FilesLen) { printf("- - %i. Datei: %s\n", i+1, Files[i]); ParseFile(Files[i], Objects[0]); i++; } }
-
Also wie mir scheint hat nikic recht damit,
da weder Speicher für Name noch für NameRaw reserviert wird.
Du solltest dich mal nach malloc oder new erkundigen.
[edit] kleinen Fehler beseitigt
Beitrag zuletzt geändert: 19.10.2010 20:41:36 von sektor -
sektor schrieb: Also wie mir scheint hat nikic recht damit,
da weder Speicher für Name noch für NameRaw reserviert wird.
Du solltest dich mal nach malloc oder new erkundigen.
[edit] kleinen Fehler beseitigt
Daran hab ich ja ja garnicht gedacht
Auf jeden Fall Danke!
(Da hab ich ich wohl zu viel mit einfachen Intepreter Sprachen gearbeitet) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage