Gå til innhold

Rekursiv kræsj!


Anbefalte innlegg

Hei!

 

Jeg er så godt som nybegynner i programmering og prøver å lage et program i c som kopierer en mappe med alle filer og undermapper....

 

Har laget en funksjon som først kopierer filer og mapper(uten innhold) i "startkatalogen", og deretter starter funkjonen rekursivt i alle de ny-opprettede mappene..

 

Men etter en stund kræsjer programmet med en "segmentation fault" og bare enkelte filer og mapper i treet er kopiert.

 

 

Legger her ved koden.............

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------

#include <stdio.h>

#include <string.h>

#include <stddef.h>

#include <stdlib.h>

#include <dirent.h>



void copy(char[150], char[150]);





int main()



{



char malbak[150]="/home/halvor/mappe/";

char kildebak[150]="/mnt/windows/";



mkdir("/home/halvor/mappe/");

copy(kildebak, malbak);



return 0;



}





void copy(char kildebak[150], char malbak[150])



{



char mal[150];

char kilde[150];



strcpy(kilde, kildebak);

strcpy(mal, malbak);



int f=0;





FILE* ofp;

FILE* ofp2;





DIR *asd;

DIR *prov;

struct dirent *fgf;



asd = opendir(kilde);



if (asd !=NULL)

while(fgf=readdir(asd))

{

if((strcmp(fgf->d_name , ".") == 1) && (strcmp(fgf->d_name , "..") == 1))

{

 strcat(kilde, fgf->d_name);

 strcat(mal, fgf->d_name);

 prov=opendir(kilde);

 if(prov ==NULL)

 

 {ofp=fopen(kilde, "r");

 ofp2=fopen(mal, "w");

 closedir(prov);

 }

 else

 {

 	

 	

 	

 mkdir(mal);

 closedir(prov);

 

 char kildebak[150];

 char malbak[150];

 

 printf("%sn", kilde);

 

 strcpy(kildebak, kilde);

 strcpy(malbak, mal);

 strcat(kildebak, "/");

 strcat(malbak, "/");



 copy(kildebak, malbak);

 

 }

 

 while(f !=EOF)

 	{f=getc(ofp);



   if(f !=EOF)

   {

   	/* printf("%d", f);*/

   fputc(f, ofp2);

 	

   }

 	}



strcpy(mal, malbak);

strcpy(kilde, kildebak);



 

        if(asd==NULL)

 ;

 else

 	f=0;

}

if(asd==NULL)

closedir(asd);

 



}



fclose(ofp);

fclose(ofp2);



}

Lenke til kommentar
Videoannonse
Annonse

Har ikke hatt tid til å kikke så nøye på koden din, men her har vi vel et "stack overflow" potensiale....?

 

En idè er kanskje å unngå rekursive kall slik som du gjør i copy funksjonen. Det er bedre å dele den opp i to i f.eks. en copy() og copy_helper() funksjon e.l.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...