hi i've been doing some coding with dynamic memory and double pointers, and work fine in the first part, but when it starts executing the second part(the second double pointer) which is exactly coded as the first one it stops working main.c.
int main(int cant,char **argv)
{
int troden;
if(cant != 3)
{
printf("papu ta mal /n");
}
else
{
troden = archivOrden(*(argv + 1),*(argv + 2));
}
return 0;
}
function.c
#include "funciones.h"
int archivOrden(char *fileName1,char *fileName2)
{
FILE *arch1 =NULL,*arch2 = NULL;
char **vec1 = NULL;
char **vec2 = NULL;
char **aux = NULL;
int ret = 0;
int i = 0, j = 0, x = 0;
int a;
arch1=fopen(fileName1,"r");
arch2=fopen(fileName2,"r");
if(arch1 == NULL || arch2 == NULL)
{
printf("error al querer crear arch \n");
}
else
{
vec1 = (char**)malloc(sizeof(char)*1);
vec2 = (char**)malloc(sizeof(char)*1);
if(vec1 == NULL || vec2 == NULL) ret = -1;
if(ret == 0)
{
*vec1 = (char*)malloc(sizeof(char)*1);
*vec2 = (char*)malloc(sizeof(char)*1);
if(*vec1 == NULL || *vec2 == NULL) ret = -1;
if(ret == 0)
{
while(!feof(arch1))
{
*(vec1+j) = realloc(*(vec1+j),sizeof(char)*(1+i));
fread((*(vec1+j)+i),sizeof(char),1,arch1);
if(*(*(vec1+j)+i) =='\n')
{
*(*(vec1+j)+i) = '\0';
printf("%s \n",*(vec1+j));
j++;
i = 0;
vec1 = realloc(vec1,sizeof(char)*(1+j));
*(vec1+j) = (char*)malloc(sizeof(char)*(1+i));
}
else i++;
}
*(vec1+j) = realloc(*(vec1+j),sizeof(char)*(1+i));
*(*(vec1+j)+i) = '\0';
i = 0;
while(!feof(arch2))
{
*(vec2+x) = realloc(*(vec2+x),sizeof(char)*(1+i));
fread((*(vec2+x)+i),sizeof(char),1,arch2);
if(*(*(vec2+x)+i) =='\n')
{
//pongo un \0 en el final de la linea
*(*(vec2+x)+i) = '\0';
printf("%s \n",*(vec2+x));
// paso a la siguiente linea
x++;
i = 0;
vec2 = (char**)realloc(vec2,sizeof(char)*(1+x));
*(vec2+x) = (char*)malloc(sizeof(char)*(1+i));
}
else i++;
}
*(vec2+x) = realloc(*(vec2+x),sizeof(char)*(1+i));
*(*(vec2+x)+i) = '\0';
printf("paso por aca \n");
for(a = 0;a<j;a++)
{
printf("%d: %s /n",a,*(vec1+j));
}
for(a = 0;a<x;a++)
{
printf("%d: %s \n",a,*(vec2+a));
}
}
}
}
printf("finalice \n");
fclose(arch1);
fclose(arch2);
for(a = 0;a<j;a++)
{
free(*(vec1+a));
}
for(a = 0;a<x;a++)
{
free(*(vec2+a));
}
free(vec1);
free(vec2);
return ret;
}
it breaks when it starts the second while and reaches the first '/n', but i cant understand because i do the exact same in the first while and works perfectly fine.