Iam, indem sie einen Parser in BisonUnerklärliche Junk-Wert in Variable
LOCATION house
NAME "House"
DESCRIPTION "You are standing\nin front of your house.\nPaths lead towards east and west."
east flag
west forest
LOCATION obelisk
NAME "Obelisk"
DESCRIPTION "A big obelisk is\nstanding before you. You can either go east or west or south."
south flag
east flag
west treasure
Mein Parser eine Datei im folgenden Format zu kompilieren versuchen, hat eine Funktion
int find(char *id) {
int i;
for(i=0;i<nLoc;i++) {
if(strcmp(id,tmp_idList[i]) == 0){
printf(tmp_idList[0]);
printf(" i = %d returned",i);
return i;
}
}
printf("Copying...");
strcpy(tmp_idList[nLoc],id);
printf("%d %s",nLoc,tmp_idList[nLoc]);
nLoc++;
printf(" nloc-1 = %d returned",nLoc-1);
return (nLoc-1);
}
Es verwendet
char tmp_idList[60][100];
Grammatik ist (hier relevant)
locnSpec : tok_LOCN tok_IDENT nameSpec descrSpec exitList
{int k = find($2);
locList[k].name = strdup(tmp_name);
locList[k].descr = strdup(tmp_descr);
memcpy(locList[k].exits,
tmp_exit,
4*sizeof(int));}
Jetzt, als ich diesen Code ausführen, irgendwie
tmpidList[0]
ist mit einem Junk-Wert gefüllt zu werden, wie in dem unten stehenden
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\MY PC\Desktop\final>bison -d -o compile.c adv6.y
C:\Users\MY PC\Desktop\final>gcc -o compile compile.c lex.yy.c
C:\Users\MY PC\Desktop\final>compile<toy.al
Copying...0 flag nloc-1 = 0 returned
Copying...1 forest nloc-1 = 1 returned
Copying...2 house nloc-1 = 2 returned
flag i = 0 returned // OK HERE
flag i = 0 returned
Copying...3 treasure nloc-1 = 3 returned
Copying...4 obelisk nloc-1 = 4 returned
Copying...5 marsh nloc-1 = 5 returned
nd west. i = 4 returned // JUNK HERE
Copying...6 flag nloc-1 = 6 returned
nd west. i = 1 returned
nd west. i = 3 returned
t. i = 4 returned
t. i = 2 returned
t. i = 4 returned
t. i = 6 returned
t. i = 5 returned
t. i = 2 returned
t. i = 3 returned
t. i = 1 returned t. i = 2 returned
C:\Users\MY PC\Desktop\final>
Als Cue Ausgang gezeigt, als ich versuchte Speicher über malloc Zuteilen
char* tmp_idList[20]
...
tmp_idList[nLoc] = malloc(strlen(id) +1)
es funktionierte gut, bis Flag war dort in tmp_idList [0] aber nicht mehr funktioniert und th Es gab einen Speicherfehler in compile.exe.
hat jemand Ahnung, was passiert? wenn Sie mehr Informationen wünschen, kann ich zur Verfügung stellen. Ich brauche wirklich Hilfe für mein Hochschulprojekt.
Verwenden Sie * Zeichenfolge * C++ - Klasse anstelle von * char ** – m0skit0
Alternativ markieren Sie keine Frage zu c mit [C++]. – dmckee
Ich habe das C++ - Tag entfernt; Es schien ein Artefakt der kollektiv unbewussten mythischen Sprache "C/C++" zu sein. – aib