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

segmentation fault dynamic allocation

Estas en el tema de segmentation fault dynamic allocation en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código c++: Ver original int Buscocod ( char * Barr1 , char * Campo1 , int & atras , int Marcafin , int ...
  #1 (permalink)  
Antiguo 08/05/2009, 11:42
 
Fecha de Ingreso: febrero-2004
Ubicación: Buenos Aires
Mensajes: 60
Antigüedad: 20 años, 2 meses
Puntos: 0
segmentation fault dynamic allocation

Código c++:
Ver original
  1. int Buscocod(char *Barr1,char *Campo1,int &atras,int Marcafin,int &caso)
  2. {
  3.      fstream inout4("MEDIN.FIN");
  4.      inout4.seekg(0,ios::end);
  5.      int pos4=inout4.tellg();
  6.      
  7.      char **Rmedi,**Rmedi1;  
  8.      
  9.      Rmedi= new char *[pos4/22];
  10.      Rmedi1= new char *[pos4/22];
  11.      for(int i=0;i<pos4/22;i++){
  12.              Rmedi[i]=new char[14];
  13.              Rmedi1[i]=new char[8];
  14.      }
  15.      int Stmedi=0;
  16.      
  17.      
  18.      for(int i=0;i<pos4/22;i++){
  19.         inout4.seekg(i*22,ios::beg);
  20.         inout4.read(reinterpret_cast<char *>(&Rmedi[i]),sizeof(char)*13); Rmedi[13]='\0';
  21.         inout4.seekg(i*22+13,ios::beg);
  22.         inout4.read(reinterpret_cast<char *>(&Rmedi1[i]),sizeof(char)*7); Rmedi1[7]='\0';
  23.      }    
  24.      
  25.      
  26.      if(strcmp(Barr1,"0000000000000")==0){
  27.           strcpy(Campo1,"0000000");
  28.           inout4.close();
  29.           return(1);
  30.      }          
  31.      
  32.      int ind;
  33.      for(int i=0;i<pos4/22;i++){
  34.         if(strcmp(Barr1,Rmedi[i])==0){
  35.               Stmedi=1;
  36.               strcpy(Campo1,Rmedi1[i]);
  37.               ind=i;  
  38.               break;                
  39.         }
  40.      }
  41.      
  42.      
  43.      if(atoi(Barr1)==0){
  44.          Stmedi=0;
  45.      }
  46.      int colum=50, guion=1,lon=7, fila=12; char titulo[50];
  47.       strcpy(titulo,"        Alta : ");
  48.       //char CodBarra[14]; strcpy(CodBarra,Barr1);
  49.       char oky;
  50.       if(Stmedi==0){
  51.          while(oky!='A'){
  52.             int Fuer = 1;
  53.             Rutina(guion,Campo1,titulo,lon,colum,fila,atras,Marcafin,caso,Fuer);
  54.             Fuer=0;    
  55.             if(atras==1)caso++;        
  56.             if(atoi(Campo1)!=0){
  57.                   gotoxy(15,20); cprintf("[A]probar?");
  58.                   oky=getch();
  59.                   if(oky=='a')oky='A';            
  60.             }else oky='A';
  61.         }
  62.          gotoxy(colum,fila);cprintf("                      ");  
  63.          gotoxy(15,20); cprintf("          ");  
  64.       }  
  65.      
  66.      if(atoi(Barr1)!=0&&atoi(Campo1)!=0&&oky=='A'){
  67.               strcpy(Rmedi[ind],Barr1);
  68.               strcpy(Rmedi1[ind],Campo1);
  69.  
  70.               inout4.seekg(pos4,ios::beg);
  71.               inout4.write(Rmedi[ind],sizeof(char)*13);
  72.               inout4.seekg(pos4+13,ios::beg);
  73.               inout4.write(Rmedi1[ind],sizeof(char)*7);
  74.               inout4.seekg(pos4+20,ios::beg);
  75.               inout4.write("\r\n",sizeof(char)*2);
  76.      }
  77.      
  78.      for(int i=0;i<pos4/22;i++){
  79.           delete[] Rmedi[i];
  80.           delete[] Rmedi1[i];
  81.      }
  82.      delete [] Rmedi, Rmedi1;
  83.      
  84.      return(0);
  85. }

En el segundo bucle cuando trata de acceder a Rmedi[i] se genera un error de segmentacion, y no entiendo por que. Las areas de memoria que trato de acceder se reservaron correctamente en lineas anteriores. Estoy usando el compilador DJGPP para dos en windows XP.
  #2 (permalink)  
Antiguo 08/05/2009, 13:39
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: segmentation fault dynamic allocation

Depuralo ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 14:17.