Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con memoria dinamica

Estas en el tema de Problema con memoria dinamica en el foro de C/C++ en Foros del Web. Hola! es la primera vez que escribo en un foro pero ya estoy desesperado, no encuentro nada, nose alomejor ignoro algo porque es la primera ...
  #1 (permalink)  
Antiguo 02/05/2010, 04:49
 
Fecha de Ingreso: mayo-2010
Mensajes: 2
Antigüedad: 14 años, 6 meses
Puntos: 0
Problema con memoria dinamica

Hola! es la primera vez que escribo en un foro pero ya estoy desesperado, no encuentro nada, nose alomejor ignoro algo porque es la primera vez que estava probando con memoria dinamica.
El problema es el siguiente:

mi programa lo que debe hacer es ir leiendo de un fichero linias y irlas concatenando dentro de un puntero al que le e asignado memoria dinamica, pero cuando lo concateno, el primer DNI que me introduce me lo introduce con valor basura, o alomejor es la memoria que le he asignado o algo...pero yo quiero que solo almacene los campos que yo quiero, que en mi caso son DNI, NOMBRE, APELLIDOS, etc... sin embargo cuando printo me sale.. È[é455245N <-- DNI con valor basura o lo que sea el valor ese que coge. Me lo coge despues de asignarle el malloc.. nose.. seguro que es por ignorancia pero no se como solucionarlo. este es el codigo gracias:

Código:
void modifica_datos(CLIENTE clientes, FILE *file){
     char dni[N];
     int memoria=0;
     char *fichero_mod;   //Puntero donde almaceno toda el fichero nuevo
     long nBytes=0;
     long nBytes2=0;
     char cadena_cop[M];  //Cadena de fichero encontrada
     char * ficha;         //Puntero para funcion strtok
     char lectura_inf[M];  //Cadena de fichero encontrada
     char c='\x087';       //Para adre"ç"a
     char num_str[N];
     char *aux;   //Puntero donde almaceno linia nueva modificada
     long nBytes_aux=0;
     int comp=1;           //0 si es igual y otro num si es dif.
     FILE *file2=NULL;
     //----------------------------->PIDE DNI A MODIFICAR y COMPRUEVA SI EXISTE O NO<---------------------------
     printf("Introdueix el DNI del client a modificar: ");
     gets(clientes.dni);
     while(buscar_dni(clientes, &memoria, dni) != 0){
                 system("cls");
                 printf("\nDNI NO EXISTENTE!!!");
                 printf("\nIntrodueix el DNI del client a modificar: ");
                 gets(clientes.dni);
     }
     //----------------------------->VAMOS AL FINAL DEL FICHERO Y CONTAMOS BYTES<---------------------------
     fseek(file,0,SEEK_END);
     nBytes = ftell(file);
     fichero_mod=(char*)malloc(sizeof(char)*nBytes);//Asignamos memoria al puntero
                                                                printf("%d",nBytes);
  printf("-->%sVALOR BASURA<--",fichero_mod);
          system("pause");
file2 = fopen("index.txt","r");
    if(file2==NULL){
                   printf("\nError al obrir l'arxiu\n");
    }
    
    //-------------------->ASIGNAMOS LINIA A LINIA MIENTRAS NO SEA LA LINIA A MODIFICAR<--------------------
    rewind(file);
    while ( !feof(file2) ){
        fscanf(file2,"%s %d\n", dni, &memoria);// almacena dni y bytes
        comp = strcmpi(clientes.dni, dni);//Si devuelve 0 es existe
        if (comp != 0){
               fgets(cadena_cop, 400, file);//Copia linia de clientes.txt
               printf("\n\n\n%s\n\n", cadena_cop);
               printf("%s",fichero_mod);
               strcat(fichero_mod, cadena_cop);//Concatena cada linia introducida  
        }
        if (comp == 0){
                 break;
              }
    }
    fclose(file2);
  #2 (permalink)  
Antiguo 02/05/2010, 05:21
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 16 años, 5 meses
Puntos: 61
Respuesta: Problema con memoria dinamica

Respuesta corta:
Despues del malloc, justo despues de el, y antes de hacer cualquier otra cosa:
fichero_mod[0] = '\0';

Respuesta larga:
http://malditoc.blogspot.com/2010/05/strings-2.html

Etiquetas: basura, dinamica, fichero, memoria
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:28.