Problem mit struct
-
Ja wollte nur nicht noch mehr rein tun weil diese Function schon oben beschrieben wurde hier nochmal alles:
struct values{ int value; struct values* next; }; struct symbol{ char* name; struct values* value; int type; int size; struct parameters* params; struct symbol* next; struct symbol* prev; }; struct symbol* symboltable=NULL; void insert(char* name, struct values* val, int type, int size, struct parameters* param){ if(symboltable==NULL){ symboltable = malloc(sizeof(struct symbol)); symboltable->name=strcpy(symboltable->name,name); symboltable->value=val; symboltable->type=type; symboltable->size=size; symboltable->params=param; symboltable->next=NULL; } else{ struct symbol* p; p=malloc(sizeof(struct symbol)); p->name=strcpy(p->name,name); p->value=val; p->type=type; p->size=size; p->params=param; p->next=symboltable; symboltable->prev=p; symboltable=p; } params=NULL; } struct values* initarray(int size){ struct values* vl=NULL; int pos=0; while(size>pos){ if(vl==NULL){ vl = malloc(sizeof(struct values)); vl->value=0; vl->next=NULL; } else{ struct values* val; val=malloc(sizeof(struct values)); val->value=0; val->next=vl; vl=val; } pos++; } return vl; } struct values* setvalue(int number){ struct values* v=NULL; v = malloc(sizeof(struct values)); v->value=number; v->next=NULL; return v; } int main(){ struct values* v=initarray(100); insert("var6",v, 2, 100, NULL); insert("var1", setvalue(10), 1, 0, NULL); insert("var3", setvalue(10), 1, 0, NULL);//Hier kommt der fehler }
-
Heureka!
void insert( char *name, struct values *val, int type, int size, struct parameters *param ) { if( !symboltable ) { symboltable = ( symbol* ) malloc( sizeof( struct symbol ) ); // bitte hier vor strcpy() speicher reservieren. symboltable->name = ( char* ) malloc( strlen( name ) + 1 ); // danke ;) symboltable->name = strcpy( symboltable->name, name ); symboltable->type = type; symboltable->size = size; symboltable->value = val; symboltable->params = param; symboltable->next = 0; } else { struct symbol* p = ( symbol* ) malloc( sizeof( struct symbol ) ); // bitte hier vor strcpy() speicher reservieren. p->name = ( char* ) malloc( strlen( name ) + 1 ); // danke ;) p->name = strcpy( p->name, name ); p->value = val; p->type = type; p->size = size; p->params = param; p->next = symboltable; symboltable->prev = p; symboltable = p; } //params = 0; ist wo definiert? }
Greetz, Swordfish
-
Rumpelstilzchen schrieb:
symboltable->name=strcpy(symboltable->name,name);
das sieht irgendwie verkehrt aus. mach's doch so:
symboltable->name=name;
-
Danke werds sofort probieren hoffe es klappt. Weis nur nicht warum der Fehler jetzt auftritt und nur bei initarray wies scheint...vorher hat der Code wunderbar funktioniert. params ist auch im Programm definiert da es für den Fehler nicht relevant ist(zumindes glaub ich das :)) hab ichs nicht dazu getan. Im Beitrag löschen wäre aber sicher nicht schlecht gewesen um Verwirrung zu vermeiden
-
Wenn du wirklich ne Copie haben möchtest allokier dir Speicher für den char *name in deiner Struktur
-
Rumpelstilzchen schrieb:
vorher hat der Code wunderbar funktioniert.
haste linux? da läuft fehlerhafter code manchmal...
-
net schrieb:
Rumpelstilzchen schrieb:
vorher hat der Code wunderbar funktioniert.
haste linux? da läuft fehlerhafter code manchmal...
Cefour schrieb:
Wenn du wirklich ne Copie haben möchtest allokier dir Speicher für den char *name in deiner Struktur
sagte ich bereits.
Greetz, Swordfish
-
Der Code läuft jetzt danke nochmal.
net schrieb:
Rumpelstilzchen schrieb:
symboltable->name=strcpy(symboltable->name,name);
das sieht irgendwie verkehrt aus. mach's doch so:
symboltable->name=name;
hab immer geglaubt das funktioniert nicht in C scheint aber doch zu funktionieren naja man lernt nie aus.
-
[edit]==> Vorsicht: Totaler schwachsinn folgt: <==[/edit]
Vorsicht, manchmal Trugschluss:
// (file scope) char *dest = 0; void foo( void ) { char *bar = "Hello"; // funktioniert dest = bar; // funktioniert nicht, da bar ab } // <= hier nicht mehr existiert // und dest ins Nirvana zeigt.
[edit]==> Vorsicht: Totaler schwachsinn ende <==[/edit]
Greetz, Swordfish
-
Swordfish schrieb:
Vorsicht, manchmal Trugschluss:
// (file scope) char *dest = 0; void foo( void ) { char *bar = "Hello"; // funktioniert dest = bar; // funktioniert nicht, da bar ab } // <= hier nicht mehr existiert // und dest ins Nirvana zeigt.
ist doch egal was mit bar ist. dest und "Hello" sind trotzdem noch da.
-
@net: verdammt, (grad compiliert) funktioniert...
[kleinlaut]tschuldigung[/kleinlaut]
Greetz, Swordfish
-
Swordfish schrieb:
@net: verdammt, (grad compiliert) funktioniert...
compilen tut vieles, auch wenn's nicht oder nur manchmal läuft...
Swordfish schrieb:
[kleinlaut]tschuldigung[/kleinlaut]
haste mir was böses getan?
-
net schrieb:
Swordfish schrieb:
@net: verdammt, (grad compiliert) funktioniert...
compilen tut vieles, auch wenn's nicht oder nur manchmal läuft...
Mensch, erklär mir das bitte nicht...
Ich stand nur auf der Leitung. Da der durch *bar referenzierte string "Hello" vom Compiler ohnehin in einer RO Data-Section abgelegt wird funzts natürlich.
Als Beispiel für diesen Trugschluss hatte ich sowieso etwas in der Artint *foo( void ) { int bar = 42; return &bar; }
im Sinn.
net schrieb:
Swordfish schrieb:
[kleinlaut]tschuldigung[/kleinlaut]
haste mir was böses getan?
Nö, bei dir entschuldige ich mich doch prinzipiell nicht
Gemeint waren natürlich alle anderen armen kleinen unschuldigen User die ich eventuell (aber nur mit sehr, sehr viel Glück) verwirrt haben könnte...Greetz, Swordfish