Avatar billede mollmannj Nybegynder
25. oktober 2002 - 15:55 Der er 7 kommentarer og
1 løsning

skabe forbindelse mellem to filer!!

Jeg har et problem med at få skabt korrekt forbindelse mellem to filer. vi bruger en header fil som "broforbindelse". header filen bliver includeret i den fil hvor vi vil kalde funktionerne fra den anden fil. problemet ligger i at vi arbejder med et array, som hidtil har fungeret fint, men nu når vi kalder det fra den anden fil, kommer der segmentation fault!

en del af en funktion kode:

laes()
{
char *laest

while(!feof(lfilid))
{
fscanf(lfilid, "%s\n", laest);
strcpy(lager[n].varenavn, laest);
}


hvor lager er et struct array.
funktionen kører fint hvis man kalder den fra denne fil, men så snart vi gør det fra en anden, kommer der en segmentation fault!!!!!
Avatar billede arne_v Ekspert
25. oktober 2002 - 15:59 #1
Det er svært at sige ud fra de foreliggende oplsyninger.

Mit gæt vil være at lfilid bliver åbnet når i kalde i samme source fil
men ikke når i kalder i en anden source fil.

Kan du checke at:
  - lfilid er erklæret korrekt
  - fopen kaldet bliver foretaget i begge tilfælde
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 16:04 #2
filen bliver åbnet korrekt. ovenstående kode er kun en del af koden. der bliver indlæst varenr. stk pris osv, men ved varenavn går det helt galt og der opstår en segmentation fault. så problemet må ligger i fscanf og strcpy.
Avatar billede arne_v Ekspert
25. oktober 2002 - 16:06 #3
Og du har også lavet en laest = malloc(et-eller-andet) ?

mvh/Arne
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 16:22 #4
kan du forklare lidt mere om det, for sådan en indgår ikke i vores program!!
Avatar billede arne_v Ekspert
25. oktober 2002 - 16:30 #5
Du har en:
  char *laest
som erklærer en pointer til char.

Og du har:
  fscanf(lfilid, "%s\n", laest);
som læser ind i det som laest peger på.

Men hvad peger laest på ?

Den skal pege på et eller andet.

Du kan f.eks. lave en:
  laest = malloc(100);
for at allokere 100 bytes og lade laest pege på dem.

(husk at free'e !)

Du kan også:

char buf[100];
laest = buf;

men så var det nemmere bare at erklære:

char laest[100];

i første omgang.
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 16:33 #6
nu siger du husk at free'e. hvad mener du helt nøjagtig med det?
Avatar billede arne_v Ekspert
25. oktober 2002 - 16:37 #7
Når du laver en:
  laest = malloc(100);
så har du allokeret 100 bytes og memory og de bliver ved
med at være allokeret. Og hvis du gør det rigtigt mange gange,
så løber dit program tør for memory.

Når du er færdig med at bruge det pågældende memory
skal du bare lave en:
    free(laest);
så bliver memoryet frigivet igen.
Avatar billede mollmannj Nybegynder
25. oktober 2002 - 16:42 #8
arne_v, så kører det. super cool. tak for hjælpen!!!!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester