10. maj 2002 - 02:20Der er
7 kommentarer og 1 løsning
Parse error -kvaler... noget med pointers?
Håber der er nogen som kan hjælpe mig med mit lille problem; jeg er bange for det er et spørgsmål om nogle pointers.
Koden ser ud som følger, og problemet er at jeg hele tiden får segmentation fault når jeg kører det (den compilerer det fint)(skal måske lige nævne at det er under cygwin i XP)
char *telegramInputBuffer[10]; int *currentTele = 0;
int reached_end = 0; int succes = 0; int i = 0;
int main(void){
char streng[] = "DetteSkalGemmes"; int test = 0; test = find_ledig_plads(streng); return(test); }
int find_ledig_plads(char streng[]){
printf("initiatingaflevering"); reached_end = 0; succes = 0; i = *currentTele;
printf("- done! /n)"); while(telegramInputBuffer[i]!="/0"){ i++; printf("searching for free slot: "); printf("%i",i); } printf("/n"); if (telegramInputBuffer[i] == "/0"){ printf("Found a slot! /n"); succes = 1;
} if (!&succes && !&reached_end){ i = 0; reached_end = 1; while(telegramInputBuffer[i]!="/0" && (i < *currentTele)){ i++; } } if(&succes || telegramInputBuffer[i]=="/0"){ telegramInputBuffer[i] = streng; succes = 1; } return succes; }
Nogen kan hjælpe!
PS: jeg sætter sværhedsgraden til svær fordi jeg har brugt snart 1½ time på at finde fejlen(e), og er nærmest desperat :)
De gange jeg har haft segmentation fault er når en af mine løkker har kørt for langt (under linux) Så prøv i første omgang at kører løkkerne hvor du sætter din løkke tæller til et fast antal for at se om det overhovedet virker. Måske kan det godt have noget at gøre med den "\0" .
Det skulle gerne blive til noget som ligner en ring-buffer for tekststrenge, men den er måske ikke helt så gennem tænk nu du siger det (laffe). find_ledig_plads skulle så søge bufferen igennem efter den første ledige plads. Men selvom konceptet måske lige skal kigges igennem igen, burde koden vel køre fint (den kan da kompilere). mickni33>> kigge lige på mine løkker og '\0' og ser om det hjælper - og tak for hjælpen begge to!
Det får du heller ikke foreløbig til at virke. Du mangler at lære en del om pointere endnu.
char *telegramInputBuffer[10];
dette allokere 10 pointere til en char streng. desuden initieres der ikke nogen værdier ! (f.eks telegramInputBuffer[1] er ikke lig 0, men noget tilfældigt):
int *currentTele = 0;
int reached_end = 0; int succes = 0; int i = 0;
int main(void) { char streng[] = "DetteSkalGemmes"; int test = 0; test = find_ledig_plads(streng); return(test); }
int find_ledig_plads(char streng[]){
printf("initiatingaflevering"); reached_end = 0; succes = 0;
Her sætter du i lig det currentTele pejer på, hvilket svarer til noget tilfældigt, da du har sat den til at pege på addresse 0.
i = *currentTele;
printf("- done! /n)");
følgende virker ikke: (pga min første kommentar)
while(telegramInputBuffer[i]!="/0"){ i++; printf("searching for free slot: "); printf("%i",i); } printf("/n"); if (telegramInputBuffer[i] == "/0"){ printf("Found a slot! /n"); succes = 1;
} if (!&succes && !&reached_end){ i = 0; reached_end = 1;
currentTele pejer stadig på intet ! og du prøver at sammenlige addressen på en streng (telegramInputBuffer[i]) med en anden addresse ("/0"), de bliver aldrig ens!
her vil du prøve at sætte telegramInputBuffer[i] til at peje på din input streng.. kommer den også til, den pejer på den i main og er IKKE en kopi. Går stregen i main ud af scope, pejer du på "intet" igen.
telegramInputBuffer[i] = streng; succes = 1; } return succes; }
Takker for den konstruktive kritik... chries>> du har helt ret i, at jeg ikke har styr på de pointere; ideen med den currentTele-pointer kom sig af at jeg et andet sted har brug for at lave call-by-reference, så den ændrer sig i hovedprogrammet også, når jeg kalde ren bestemt metode. Har modificeret det hele en del, og mange ting er blevet anderledes. Jeg ved bare aldrig hvornår det er smart/nødvendigt med de pointers :(
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.