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:40
 
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 05/05/2010, 20:43
Avatar de Fernand0  
Fecha de Ingreso: septiembre-2005
Ubicación: Buenos Aires
Mensajes: 610
Antigüedad: 19 años, 1 mes
Puntos: 19
Respuesta: Problema con memoria dinamica

printf("-->%sVALOR BASURA<--", *fichero_mod);

tal vez?
  #3 (permalink)  
Antiguo 08/05/2010, 20:21
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con memoria dinamica

#include <iostream>
using namespace std;

void main (void){

char *Nomb;
int tam;
cin>>Nomb;
tam = strlen(Nomb)+1;
Nomb = new char [tam];
cout<<endl<<Nomb<<endl;


}

alguien me podria decir como hacer que este trozo de codigo funcione porfa me urge
es para una validacion que tengo q hacer y no busco la manera lo unico que nesito es saber el tamaño de mi cadena
antes de decir el tamaño, para no despediciar memoria pero no consigo hacer q corra

dato: uso visual 2008
  #4 (permalink)  
Antiguo 08/05/2010, 21:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Problema con memoria dinamica

agrega #include <string.h>
  #5 (permalink)  
Antiguo 09/05/2010, 07:00
 
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

Pide memoria gigante para la lectura, hacerlo despues copiara en memoria no reservada.

Código C++:
Ver original
  1. // ...
  2.   char *Nomb;
  3.   Nomb = new char [1000];
  4.   int tam;
  5.   cin>>Nomb;
  6.   tam = strlen(Nomb)+1;
  7.   cout<<endl<<Nomb<<endl;
  #6 (permalink)  
Antiguo 09/05/2010, 10:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con memoria dinamica

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Pide memoria gigante para la lectura, hacerlo despues copiara en memoria no reservada.

Código C++:
Ver original
  1. // ...
  2.   char *Nomb;
  3.   Nomb = new char [1000];
  4.   int tam;
  5.   cin>>Nomb;
  6.   tam = strlen(Nomb)+1;
  7.   cout<<endl<<Nomb<<endl;


muchas gracias pero no se si eso solucione problema, lo q trato de hacer es contar el numero caracteres y crear un arreglo dinamico de ese mismo numero +1 para ahorrar memoria, por alguna razon cuando lo corro como lo puse en el blog me despliega un error de inizializacion, pero no entiendo como podria inicializaar algo q no se que tamaño tendra

saludos
  #7 (permalink)  
Antiguo 09/05/2010, 10:40
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con memoria dinamica

Cita:
Iniciado por sam90 Ver Mensaje
agrega #include <string.h>
ey gracias ya trate pero no se solucione el problema
  #8 (permalink)  
Antiguo 09/05/2010, 12:22
 
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

Cita:
Iniciado por Jacmman Ver Mensaje
muchas gracias pero no se si eso solucione problema, lo q trato de hacer es contar el numero caracteres y crear un arreglo dinamico de ese mismo numero +1 para ahorrar memoria, por alguna razon cuando lo corro como lo puse en el blog me despliega un error de inizializacion, pero no entiendo como podria inicializaar algo q no se que tamaño tendra

saludos
Pide memoria gigante. Lee. Cuenta lo leido. Pide memoria suficiente para copiar lo leido. Copia lo leido. Destruye la memoria gigante.

Alternativa: Usar el tipo string y la funcion getline() : http://www.cplusplus.com/reference/string/getline/

Última edición por CalgaryCorpus; 09/05/2010 a las 12:47
  #9 (permalink)  
Antiguo 09/05/2010, 14:44
 
Fecha de Ingreso: mayo-2010
Mensajes: 4
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Problema con memoria dinamica

Cita:
Iniciado por CalgaryCorpus Ver Mensaje
Pide memoria gigante. Lee. Cuenta lo leido. Pide memoria suficiente para copiar lo leido. Copia lo leido. Destruye la memoria gigante.

Alternativa: Usar el tipo string y la funcion getline() : [url]http://www.cplusplus.com/reference/string/getline/[/url]

oooo ya veo ya comprendi lo hare tiene sentido mil gracias

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 13:12.