Hola, estoy creando un programa para dividir archivos, tipo winrar, pero me he atascado con un error de ejecuccion. a ver si alguien me puede ayudar.
al principio, he creado la matriz de ficheros asi: FILE f2[10]; y funcionaba bien. pero despues he decidido hacerlo con memoria dinamica, usando realloc, pero ahi ya me ha dado problemas.
Código C:
Ver original#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *f1, *f2, *f3;
char buffer[10000], name[100]="/home/.../Escritorio/.../salida.000";
char nombre[100];
int leidos=0, tamano=0, kbparte = 0, nfiles=0, i=0, j=0, pos=0, g=49;
printf("Nombre del archivo: ");
f1
= fopen(nombre
, "rb"); if (f1==NULL)
{
return -1;
}
printf("Tamano: %d bytes\n\n", tamano
); printf("\nBytes por parte: ");
leidos
= fread(buffer
, kbparte
, 1, f1
); if(leidos == 0)
{
printf("no se ha leido ningun byte"); return -1;
}
if(leidos == -1)
{
return -1;
}
while(leidos != 0)
{
f2
= (FILE
*)realloc(f2
, nfiles
*sizeof(struct FILE
*) + sizeof(struct FILE
*)); if(f2==NULL)
{
return -1;
}
nfiles++;
if (f2==NULL)
{
perror("No se puede abrir salida.txt"); return -1;
}
fwrite(buffer
, kbparte
, leidos
, f2
);
buffer[0]='0';
leidos
= fread(buffer
, kbparte
, 1, f1
);
if(leidos == -1)
{
return -1;
}
name[pos] = g;
g++;
//i++;
f2++;
}
printf("\nLeidos: %d bytes. \n\n", leidos
);
return 0;
}
lo mas seguro es que el error este en la linea del REALLOC
ERROR:
Código:
Nombre del archivo: archivo1.dat
Tamano: 53 bytes
Bytes por parte: 10
*** glibc detected *** ./prog: realloc(): invalid pointer: 0x085a9214 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x46b591]
/lib/tls/i686/cmov/libc.so.6(realloc+0x2bb)[0x47117b]
./prog[0x8048a04]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x416bd6]
./prog[0x80486f1]
======= Memory map: ========
00214000-00231000 r-xp 00000000 08:03 2654291 /lib/libgcc_s.so.1
00231000-00232000 r--p 0001c000 08:03 2654291 /lib/libgcc_s.so.1
00232000-00233000 rw-p 0001d000 08:03 2654291 /lib/libgcc_s.so.1
00400000-00553000 r-xp 00000000 08:03 2679452 /lib/tls/i686/cmov/libc-2.11.1.so
00553000-00554000 ---p 00153000 08:03 2679452 /lib/tls/i686/cmov/libc-2.11.1.so
00554000-00556000 r--p 00153000 08:03 2679452 /lib/tls/i686/cmov/libc-2.11.1.so
00556000-00557000 rw-p 00155000 08:03 2679452 /lib/tls/i686/cmov/libc-2.11.1.so
00557000-0055a000 rw-p 00000000 00:00 0
005f1000-0060c000 r-xp 00000000 08:03 2654853 /lib/ld-2.11.1.so
0060c000-0060d000 r--p 0001a000 08:03 2654853 /lib/ld-2.11.1.so
0060d000-0060e000 rw-p 0001b000 08:03 2654853 /lib/ld-2.11.1.so
006b5000-006b6000 r-xp 00000000 00:00 0 [vdso]
08048000-08049000 r-xp 00000000 08:03 3851841 /home/.../Escritorio/.../prog
08049000-0804a000 r--p 00000000 08:03 3851841 /home/.../Escritorio/.../prog
0804a000-0804b000 rw-p 00001000 08:03 3851841 /home/.../Escritorio/.../prog
085a9000-085ca000 rw-p 00000000 00:00 0 [heap]
b7819000-b781a000 rw-p 00000000 00:00 0
b782d000-b7833000 rw-p 00000000 00:00 0
bf88e000-bf8a3000 rw-p 00000000 00:00 0 [stack]
Cancelado