elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  se ha producido una violacion de acceso a memoria dev c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: se ha producido una violacion de acceso a memoria dev c++  (Leído 5,532 veces)
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
se ha producido una violacion de acceso a memoria dev c++
« en: 23 Abril 2014, 19:59 pm »

Desarrolle un programa en c++, al compilar no me da error, pero cuando esta ejecutándose me sale  "se ha producido una violación de acceso a memoria", estudiando el código paso a paso observe q el error aparece cuando estoy ejecutando la siguiente linea:
Código:
d.push_back(sumpar);
es decir cuando intento escribir al final de un vector; en el momento que intento escribir en el vector este ya tiene 8 elementos, pero el vector fue declarado utilizando la libreria estandar por lo cual no tiene asignado un tamaño fijo, cual quier posible solucion me serviria de mucho


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #1 en: 23 Abril 2014, 20:33 pm »

Así sin más, veo difícil saber el problema. Pon el código completo (si es posible solo las partes donde modifiques ese vector, lo declares, y etc, en caso de que sea un code largo)


En línea

loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #2 en: 28 Abril 2014, 17:05 pm »

el vector lo declaro de la siguiente forma:
Código:
std::vector<float> d;
el vector lo voy construyendo asi:
Código:
for (;;)//en este ciclo se cambia de columna en el vector c
{
    float tem=c[w];
    u=0;
        if (cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
                    {float sumpar=0;
                    while (sumpar<=tem/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
                    {sumpar=sumpar+vida.frecuencias[v];
           u=u+1;
                 v=v+1;
           }
              if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
              {
                           sumpar=sumpar-vida.frecuencias[v-1];
                           u=u-1;
                          }
d.push_back(sumpar);
dd.push_back(u);
d.push_back(c[w]-d[t]);
dd.push_back(cc[w]-dd[t]);
v=0;
                for (int i=0;i<d.size();i++)
{v=v+dd[i];
}
t=t+2;
w=w+1;
        if (w+1>kkkkk)
      {         
        break;
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #3 en: 28 Abril 2014, 20:29 pm »

Nombres de variables poco descriptivos, nada de indentación...

Todo eso son malas prácticas que debemos editar. Voy a usar mi plugin mágico para identarte el código:
Código
  1. for (;;)//en este ciclo se cambia de columna en el vector c
  2. {
  3.    float tem=c[w];
  4.    u=0;
  5.  
  6.    if (cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
  7.    {
  8.        float sumpar=0;
  9.        while (sumpar<=tem/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
  10.        {
  11.            sumpar=sumpar+vida.frecuencias[v];
  12.            u=u+1;
  13.            v=v+1;
  14.        }
  15.        if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
  16.        {
  17.            sumpar=sumpar-vida.frecuencias[v-1];
  18.            u=u-1;
  19.        }
  20.  
  21.        d.push_back(sumpar);
  22.        dd.push_back(u);
  23.        d.push_back(c[w]-d[t]);
  24.        dd.push_back(cc[w]-dd[t]);
  25.        v=0;
  26.  
  27.        for (int i=0; i<d.size(); i++)
  28.        {
  29.            v=v+dd[i];
  30.        }
  31.        t=t+2;
  32.        w=w+1;
  33.        if (w+1>kkkkk) // kkkkkk??? QUE NOMBRE DE VARIABLE ES ESE?
  34.        {
  35.            break;
  36.  
  37. // falta codigo aqui...
  38.  
Identar es poner las tabulaciones correspondientes al código para que se vea más claro donde comienza y termina cada if/while.

El código es muy poco expresivo, faltan todavía bastantes datos y variables por definir. Además del valor inicial de las variables... ¿Puedes darnos un c´ódigo más completo?
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #4 en: 28 Abril 2014, 21:25 pm »

Nombres de variables poco descriptivos, nada de indentación...

Todo eso son malas prácticas que debemos editar. Voy a usar mi plugin mágico para identarte el código:


¡Secretitos en reunión es de mala educación!.

¿Vamos como activas/descargas el dichosito plugin?

¡¡¡¡ Saluditos! ..... !!!!


En línea

loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #5 en: 28 Abril 2014, 21:53 pm »

este es el codigo completo
Código:
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <vector>
using namespace std;
////////////
struct datos
{
std::vector<float> simbolos;
std::vector<float> frecuencias;
int tamanodic;
}cd1;
/////////////////////declaracion de funciones
datos histograma(vector<float> &traza);
void shannonfano(datos &vida);
int main()
{
FILE *archivo;
char caracter;
std::vector<float> ayudante;
std::vector<float> traza;
float ayuda;
    char numPtr[1];
    float por=5;
archivo = fopen("D:\\entrada10.txt","r");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
        }else{
    printf("\nEl contenido del archivo de prueba es \n\n");
      while (feof(archivo) == 0)
    {
caracter = fgetc(archivo);
numPtr[1]=caracter;
ayuda=float(numPtr[1]-48);
int kk=0;
ayudante.push_back(ayuda);
////////////////////////////////// aqui empezamos a tranformar
if (ayuda==-38)
{
                       if (ayudante[0]==-3)/////saber si es negativo
      { kk=1;
      ayudante.erase (ayudante.begin());
              }//////////
              ayudante.pop_back();
        int i=0;
        float suma=0;
        int cifras=0;/////dice cuantas cifras enteras tiene
        while (i<ayudante.size()) ///////saber cuantas cifras enteras tiene
        {     if(ayudante[i]==-2)//contador de cifras enteras
              {cifras=i;
              i=ayudante.size();
              }
             else
             {i++;
                 cifras=i;
                 }
             ;   
         }        //////////termina while     
         int ii=0;
         int cifraaux=cifras;
         float aux=0;
         int k=0;
         while (cifras>1)/////parte entera
               {aux=ayudante[ii];
               k=cifras;
               while (k>1) ///////multiplicaciones parte entera
                     {aux=aux*10;
                     k--;
                      }
               cifras--;
               ii++;
               suma=suma+aux;
               }
               suma=suma+ayudante[ii];
               int deci=ayudante.size()-cifraaux-1;
               ii=ayudante.size()-1;
               while (deci>0)////parte decimal
                     {aux=ayudante[ii];
                     k=deci;
                     while(k>0)///haciendo decimales
                               {aux=aux/10;
                               k--;
                               }
                     deci--;
                     ii--;
                     suma=suma+aux;
                     }
                     if (kk==1)/////////signo negativo
                     {traza.push_back(suma*-1);
                     }
                     else
                     {traza.push_back(suma);
                     }
                     ayudante.clear();
         }
//////////////////////////////////termina transformacion
    }
}       
        fclose(archivo);   
        /////////////////////FUNCIONES%%%%%%%%%%%%%
       histograma (traza);
       cout<<"\n="<<cd1.tamanodic;
       shannonfano(cd1);
       
       getch();
}

//////////funcion HISTOGRAMA
////////%%%%%%%%%%&&&&&&&&&&&
datos histograma(vector<float> &traza)
{
//cargamos el primer valor
 
int contfre=0;
cd1.simbolos.push_back(traza[0]);
for (int ii=0;ii<traza.size();ii++)
            {if (traza[ii]==traza[0])
                {contfre++;}
            }
cd1.frecuencias.push_back(contfre);
for (int i=1;i<traza.size();i++)
{int cont=0;
int contfre=0;
     for (int ii=0;ii<cd1.simbolos.size();ii++)
         {if (traza[i]==cd1.simbolos[ii])
             {cont++;
             break;}
         }
     if (cont==0)
        {cd1.simbolos.push_back(traza[i]);
        for (int ii=i;ii<traza.size();ii++)
            {if (traza[ii]==traza[i])
                {contfre++;}
            }
        cd1.frecuencias.push_back(contfre);
        }
       
}
cd1.tamanodic=cd1.simbolos.size();
 for(int ii=0;ii<cd1.simbolos.size();ii++)
                     {cout<<"\n simbolos["<<ii<<"]="<<cd1.simbolos[ii];
                     cout<<"\n frecuencias["<<ii<<"]="<<cd1.frecuencias[ii];}
 float sumama=0;
 for(int ii=0;ii<cd1.simbolos.size();ii++)
 {sumama=sumama+cd1.frecuencias[ii];}
  cout<<"\n sumama="<<sumama;
  return cd1;
 }
 
 
 ///////////FUNCION SHANNON_FANO
 ///////////////////////////&&&&&&&&&&&&%%%%%%%%%%%%%%%
 void shannonfano(datos &vida)
{
std::vector<float> ayudante;//copia de los simbolos
//%%%%%%%%%%%%
int pp=vida.tamanodic;
float masayuda=0;
for (int i=0;i<pp;i++)
                  { masayuda=vida.simbolos[i];
                  ayudante.push_back(masayuda);//
                  }

//%%%%%%%%%%
bool dic[vida.tamanodic][20];//dic=diccionario
for (int i=0;i<pp;i++)
                     {for(int ii=0;ii<20;ii++)
                     dic[i][ii]=0; 
                     } 
std::vector<int> numb;//numero de bits a tomar para la codificacion permite saber cuantos bits debo tomar para cada simbolo
std::vector<int> fin;// nos dice cual fue el simbolo que salio
int nci=0;
int contafin=0;//se guardara en fin
int numcol=0;//numero de columna en dic
int numfil=0;//numero de fila en dic
//%%%%%%%%%%%%%%%
std::vector<float> sfin; //las frecuencias pasan a este vector cuando ya se obtiene el codigo para el respectivo simbolo
std::vector<float> xfin;//el simbolo pasa a este vector cuando ya tiene un codigo asignado
int contaite=0;//numero de iteraciones, se guarda en numb
//%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%
float temp;
float temp2;
//metodo burbuja en caso de que sea necesario ordenar

for (int i=0;i<pp;i++)
{     
for (int j=i;j<pp;j++)
{
if (vida.frecuencias[i]<vida.frecuencias[j])
{
temp=vida.frecuencias[i];
temp2=vida.simbolos[i];
vida.frecuencias[i]=vida.frecuencias[j];
vida.simbolos[i]=vida.simbolos[j];
vida.frecuencias[j]=temp;
vida.simbolos[j]=temp2;
}

}
}
for(int ii=0;ii<100;ii++)
                     {cout<<"\n simbolos["<<ii<<"]="<<vida.simbolos[ii];
                     cout<<"\n frecuencias["<<ii<<"]="<<vida.frecuencias[ii];}
// aqui termina el ordenamiento de frecuencias y simbolos
float sum=0;
for (int i=0;i<vida.frecuencias.size();i++)
{sum=sum+vida.frecuencias[i];
}
cout<<"\n suma="<<sum;
// empezamos con el arbol

int z=1;
std::vector<float> c; //guarda la suma de frecuencias

std::vector<int> cc;//guarda cuantos simbolos suman cada frecuencia

c.push_back(sum);
cout<<"\n c[0]="<<c[0];

cc.push_back(vida.frecuencias.size());
cout<<"\n cc[0]="<<cc[0];
std::vector<float> d;
cout<<"\n maximo tamaño"<<d.max_size();
std::vector<int> dd;
//la idea del programa es ir observando los datos en c, para ir armando d,
//al finalizar el ciclo d se guarda en c y vuelve a empezar
int pa=0;
int XXX=0;
int compa=1;
int kkkkk=c.size();
for (;;)// ciclo para cambiar de celda
{
    if (vida.frecuencias.empty())//el programa finaliza cuando el vector frecuencias esta vacio, osea q todos los simbolos ya tienen
    //su respectivo codigo
    {break;}
    if (XXX>0) //para q copie d en c despues de la primera iteración
      {
                     int kkkkk=d.size();
            cout<<"\n kkk="<<kkkkk;
                  c.clear();
                  cc.clear();
                  for (int i=0;i<kkkkk;i++)
                  { c.push_back(d[i]); //copio d en c
                  cc[i]=dd[i];// copio dd en cc
                 
                  }           
      } int kkkkk=d.size();

                    XXX++;
                    d.clear();
                    dd.clear();
                   
int t=0;
int v=0;
int w=0;

int u=0;

for (;;)//en este ciclo se cambia de columna en el vector c
{
    float tem=c[w];
    u=0;
        if (cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
                    {float sumpar=0;
                    while (sumpar<=tem/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
                    {sumpar=sumpar+vida.frecuencias[v];
           u=u+1;
                 v=v+1;
           }
              if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
              {
                           sumpar=sumpar-vida.frecuencias[v-1];
                           u=u-1;
                          }
d.push_back(sumpar);
dd.push_back(u);
d.push_back(c[w]-d[t]);
dd.push_back(cc[w]-dd[t]);
v=0;
                for (int i=0;i<d.size();i++)
{v=v+dd[i];
}
t=t+2;
w=w+1;
        if (w+1>kkkkk)
      {         
        break;
        }
}// termina if para armar d
else {w=w+1;}
}//termina for para armar d
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// armamos los codigos %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numfil=0;
for (int au=0;au<dd.size();au++)
{   nci=dd[au];
    int p=0;
    int pop=1;
    int qre=1;
    //cout<<"\n numfil="<<numfil;
    while (p<nci)
    {     while (pop<=fin.size())//buscamos los simbolos que ya tienen un codigo, para no poner bits en sus codigos
          {     if (numfil==fin[pop-1])
                    {cout<<"\n no entre a fila="<<numfil;
                   numfil++;
                   pop=1;
                   }
                   else
                   {pop++;
                   }
                   qre++;
          }
          int rem=au%2;//miramos si la posicion es par o impar, asi sabemos si debemos poner 0 o 1
          if (rem==0)
          {
                     //cout<<"\n numfil="<<numfil;
                     dic[numfil][numcol]=0;
          }
          else
          {
              dic[numfil][numcol]=1;
          }
          numfil++;
          p++;
    }
  }
numcol++;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//armando vectores finales
float pot=0;//para sfin
float potx=0;//para xfin
int knk=dd.size();
int gigo=0;
int sumita=0;
contaite++;
for (int i=0;i<knk;i++)//en esta parte eliminamos los simbolos que ya tienen un codigo, y los copiamos en xfin, al igual
// su respectiva frecuencia se copia en sfin
{   if (dd[gigo]==1)
              {if (gigo==0)
                  {pot=vida.frecuencias[0];
                  potx=vida.simbolos[0];
                  sfin.push_back(pot);
                  xfin.push_back(potx);
                  vida.simbolos.erase (vida.simbolos.begin());
                  vida.frecuencias.erase (vida.frecuencias.begin());
                  dd.erase (dd.begin());
                  d.erase(d.begin());
                  int ayuda=0;
                  while (ayudante[ayuda]!=potx)//busca la posicion en la que se encuentra el simbolo a sacar
                        {ayuda++;
                        }
                  numb.push_back(contaite);
                  fin.push_back(ayuda);//fin nos dice las filas de dic a las cuales no les debemos poner mas bits
                     }
                  else
                 { 
                  sumita=0;
                      for (int i=0;i<gigo;i++)
                      {sumita=sumita+dd[i];
                       }     
                       pot=vida.frecuencias[sumita];
                       potx=vida.simbolos[sumita];
                       sfin.push_back(pot);
                       xfin.push_back(potx);
                       vida.simbolos.erase (vida.simbolos.begin()+sumita);
                       vida.frecuencias.erase (vida.frecuencias.begin()+sumita);
                       dd.erase (dd.begin()+gigo);
                       d.erase(d.begin()+gigo);
                       numb.push_back(contaite);//numb nos dice el numero de bits que tiene cada codigo
                       int ayuda=0;
                       while (ayudante[ayuda]!=potx)
                        {ayuda++;
                        }
                        fin.push_back(ayuda);
                  }
              }
              else {gigo++;}
}
                   
                     for(int ii=0;ii<xfin.size();ii++)
                     {cout<<"\n xfin["<<ii<<"]="<<xfin[ii];}
                   for(int ii=0;ii<xfin.size();ii++)
                    {cout<<"\n numb["<<ii<<"]="<<numb[ii];}
}
int funca=0;
}

el error se presenta al entrar en la segunda funcion denominada shannon-fano
En línea

loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #6 en: 28 Abril 2014, 22:54 pm »

probe el codigo con otros datos y tampoco funciono, pero en este caso el error se presentaba en otra linea, pero tienen en común el uso de push_back, acaso tiene alguna restriccion esta funcion?
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #7 en: 29 Abril 2014, 00:39 am »

¡Secretitos en reunión es de mala educación!.

¿Vamos como activas/descargas el dichosito plugin?

¡¡¡¡ Saluditos! ..... !!!!



Es el plugin de Codeblocks. Viene cuando lo instalas ^^

este es el codigo completo
Código:
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <vector>
using namespace std;
////////////
struct datos
{
std::vector<float> simbolos;
std::vector<float> frecuencias;
int tamanodic;
}cd1;
/////////////////////declaracion de funciones
datos histograma(vector<float> &traza);
void shannonfano(datos &vida);
int main()
{
FILE *archivo;
char caracter;
std::vector<float> ayudante;
std::vector<float> traza;
float ayuda;
    char numPtr[1];
    float por=5;
archivo = fopen("D:\\entrada10.txt","r");
if (archivo == NULL){
printf("\nError de apertura del archivo. \n\n");
        }else{
    printf("\nEl contenido del archivo de prueba es \n\n");
      while (feof(archivo) == 0)
    {
caracter = fgetc(archivo);
numPtr[1]=caracter;
ayuda=float(numPtr[1]-48);
int kk=0;
ayudante.push_back(ayuda);
////////////////////////////////// aqui empezamos a tranformar
if (ayuda==-38)
{
                       if (ayudante[0]==-3)/////saber si es negativo
      { kk=1;
      ayudante.erase (ayudante.begin());
              }//////////
              ayudante.pop_back();
        int i=0;
        float suma=0;
        int cifras=0;/////dice cuantas cifras enteras tiene
        while (i<ayudante.size()) ///////saber cuantas cifras enteras tiene
        {     if(ayudante[i]==-2)//contador de cifras enteras
              {cifras=i;
              i=ayudante.size();
              }
             else
             {i++;
                 cifras=i;
                 }
             ;   
         }        //////////termina while     
         int ii=0;
         int cifraaux=cifras;
         float aux=0;
         int k=0;
         while (cifras>1)/////parte entera
               {aux=ayudante[ii];
               k=cifras;
               while (k>1) ///////multiplicaciones parte entera
                     {aux=aux*10;
                     k--;
                      }
               cifras--;
               ii++;
               suma=suma+aux;
               }
               suma=suma+ayudante[ii];
               int deci=ayudante.size()-cifraaux-1;
               ii=ayudante.size()-1;
               while (deci>0)////parte decimal
                     {aux=ayudante[ii];
                     k=deci;
                     while(k>0)///haciendo decimales
                               {aux=aux/10;
                               k--;
                               }
                     deci--;
                     ii--;
                     suma=suma+aux;
                     }
                     if (kk==1)/////////signo negativo
                     {traza.push_back(suma*-1);
                     }
                     else
                     {traza.push_back(suma);
                     }
                     ayudante.clear();
         }
//////////////////////////////////termina transformacion
    }
}       
        fclose(archivo);   
        /////////////////////FUNCIONES%%%%%%%%%%%%%
       histograma (traza);
       cout<<"\n="<<cd1.tamanodic;
       shannonfano(cd1);
       
       getch();
}

//////////funcion HISTOGRAMA
////////%%%%%%%%%%&&&&&&&&&&&
datos histograma(vector<float> &traza)
{
//cargamos el primer valor
 
int contfre=0;
cd1.simbolos.push_back(traza[0]);
for (int ii=0;ii<traza.size();ii++)
            {if (traza[ii]==traza[0])
                {contfre++;}
            }
cd1.frecuencias.push_back(contfre);
for (int i=1;i<traza.size();i++)
{int cont=0;
int contfre=0;
     for (int ii=0;ii<cd1.simbolos.size();ii++)
         {if (traza[i]==cd1.simbolos[ii])
             {cont++;
             break;}
         }
     if (cont==0)
        {cd1.simbolos.push_back(traza[i]);
        for (int ii=i;ii<traza.size();ii++)
            {if (traza[ii]==traza[i])
                {contfre++;}
            }
        cd1.frecuencias.push_back(contfre);
        }
       
}
cd1.tamanodic=cd1.simbolos.size();
 for(int ii=0;ii<cd1.simbolos.size();ii++)
                     {cout<<"\n simbolos["<<ii<<"]="<<cd1.simbolos[ii];
                     cout<<"\n frecuencias["<<ii<<"]="<<cd1.frecuencias[ii];}
 float sumama=0;
 for(int ii=0;ii<cd1.simbolos.size();ii++)
 {sumama=sumama+cd1.frecuencias[ii];}
  cout<<"\n sumama="<<sumama;
  return cd1;
 }
 
 
 ///////////FUNCION SHANNON_FANO
 ///////////////////////////&&&&&&&&&&&&%%%%%%%%%%%%%%%
 void shannonfano(datos &vida)
{
std::vector<float> ayudante;//copia de los simbolos
//%%%%%%%%%%%%
int pp=vida.tamanodic;
float masayuda=0;
for (int i=0;i<pp;i++)
                  { masayuda=vida.simbolos[i];
                  ayudante.push_back(masayuda);//
                  }

//%%%%%%%%%%
bool dic[vida.tamanodic][20];//dic=diccionario
for (int i=0;i<pp;i++)
                     {for(int ii=0;ii<20;ii++)
                     dic[i][ii]=0; 
                     } 
std::vector<int> numb;//numero de bits a tomar para la codificacion permite saber cuantos bits debo tomar para cada simbolo
std::vector<int> fin;// nos dice cual fue el simbolo que salio
int nci=0;
int contafin=0;//se guardara en fin
int numcol=0;//numero de columna en dic
int numfil=0;//numero de fila en dic
//%%%%%%%%%%%%%%%
std::vector<float> sfin; //las frecuencias pasan a este vector cuando ya se obtiene el codigo para el respectivo simbolo
std::vector<float> xfin;//el simbolo pasa a este vector cuando ya tiene un codigo asignado
int contaite=0;//numero de iteraciones, se guarda en numb
//%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%
float temp;
float temp2;
//metodo burbuja en caso de que sea necesario ordenar

for (int i=0;i<pp;i++)
{     
for (int j=i;j<pp;j++)
{
if (vida.frecuencias[i]<vida.frecuencias[j])
{
temp=vida.frecuencias[i];
temp2=vida.simbolos[i];
vida.frecuencias[i]=vida.frecuencias[j];
vida.simbolos[i]=vida.simbolos[j];
vida.frecuencias[j]=temp;
vida.simbolos[j]=temp2;
}

}
}
for(int ii=0;ii<100;ii++)
                     {cout<<"\n simbolos["<<ii<<"]="<<vida.simbolos[ii];
                     cout<<"\n frecuencias["<<ii<<"]="<<vida.frecuencias[ii];}
// aqui termina el ordenamiento de frecuencias y simbolos
float sum=0;
for (int i=0;i<vida.frecuencias.size();i++)
{sum=sum+vida.frecuencias[i];
}
cout<<"\n suma="<<sum;
// empezamos con el arbol

int z=1;
std::vector<float> c; //guarda la suma de frecuencias

std::vector<int> cc;//guarda cuantos simbolos suman cada frecuencia

c.push_back(sum);
cout<<"\n c[0]="<<c[0];

cc.push_back(vida.frecuencias.size());
cout<<"\n cc[0]="<<cc[0];
std::vector<float> d;
cout<<"\n maximo tamaño"<<d.max_size();
std::vector<int> dd;
//la idea del programa es ir observando los datos en c, para ir armando d,
//al finalizar el ciclo d se guarda en c y vuelve a empezar
int pa=0;
int XXX=0;
int compa=1;
int kkkkk=c.size();
for (;;)// ciclo para cambiar de celda
{
    if (vida.frecuencias.empty())//el programa finaliza cuando el vector frecuencias esta vacio, osea q todos los simbolos ya tienen
    //su respectivo codigo
    {break;}
    if (XXX>0) //para q copie d en c despues de la primera iteración
      {
                     int kkkkk=d.size();
            cout<<"\n kkk="<<kkkkk;
                  c.clear();
                  cc.clear();
                  for (int i=0;i<kkkkk;i++)
                  { c.push_back(d[i]); //copio d en c
                  cc[i]=dd[i];// copio dd en cc
                 
                  }           
      } int kkkkk=d.size();

                    XXX++;
                    d.clear();
                    dd.clear();
                   
int t=0;
int v=0;
int w=0;

int u=0;

for (;;)//en este ciclo se cambia de columna en el vector c
{
    float tem=c[w];
    u=0;
        if (cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
                    {float sumpar=0;
                    while (sumpar<=tem/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
                    {sumpar=sumpar+vida.frecuencias[v];
           u=u+1;
                 v=v+1;
           }
              if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
              {
                           sumpar=sumpar-vida.frecuencias[v-1];
                           u=u-1;
                          }
d.push_back(sumpar);
dd.push_back(u);
d.push_back(c[w]-d[t]);
dd.push_back(cc[w]-dd[t]);
v=0;
                for (int i=0;i<d.size();i++)
{v=v+dd[i];
}
t=t+2;
w=w+1;
        if (w+1>kkkkk)
      {         
        break;
        }
}// termina if para armar d
else {w=w+1;}
}//termina for para armar d
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// armamos los codigos %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
numfil=0;
for (int au=0;au<dd.size();au++)
{   nci=dd[au];
    int p=0;
    int pop=1;
    int qre=1;
    //cout<<"\n numfil="<<numfil;
    while (p<nci)
    {     while (pop<=fin.size())//buscamos los simbolos que ya tienen un codigo, para no poner bits en sus codigos
          {     if (numfil==fin[pop-1])
                    {cout<<"\n no entre a fila="<<numfil;
                   numfil++;
                   pop=1;
                   }
                   else
                   {pop++;
                   }
                   qre++;
          }
          int rem=au%2;//miramos si la posicion es par o impar, asi sabemos si debemos poner 0 o 1
          if (rem==0)
          {
                     //cout<<"\n numfil="<<numfil;
                     dic[numfil][numcol]=0;
          }
          else
          {
              dic[numfil][numcol]=1;
          }
          numfil++;
          p++;
    }
  }
numcol++;
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//armando vectores finales
float pot=0;//para sfin
float potx=0;//para xfin
int knk=dd.size();
int gigo=0;
int sumita=0;
contaite++;
for (int i=0;i<knk;i++)//en esta parte eliminamos los simbolos que ya tienen un codigo, y los copiamos en xfin, al igual
// su respectiva frecuencia se copia en sfin
{   if (dd[gigo]==1)
              {if (gigo==0)
                  {pot=vida.frecuencias[0];
                  potx=vida.simbolos[0];
                  sfin.push_back(pot);
                  xfin.push_back(potx);
                  vida.simbolos.erase (vida.simbolos.begin());
                  vida.frecuencias.erase (vida.frecuencias.begin());
                  dd.erase (dd.begin());
                  d.erase(d.begin());
                  int ayuda=0;
                  while (ayudante[ayuda]!=potx)//busca la posicion en la que se encuentra el simbolo a sacar
                        {ayuda++;
                        }
                  numb.push_back(contaite);
                  fin.push_back(ayuda);//fin nos dice las filas de dic a las cuales no les debemos poner mas bits
                     }
                  else
                 { 
                  sumita=0;
                      for (int i=0;i<gigo;i++)
                      {sumita=sumita+dd[i];
                       }     
                       pot=vida.frecuencias[sumita];
                       potx=vida.simbolos[sumita];
                       sfin.push_back(pot);
                       xfin.push_back(potx);
                       vida.simbolos.erase (vida.simbolos.begin()+sumita);
                       vida.frecuencias.erase (vida.frecuencias.begin()+sumita);
                       dd.erase (dd.begin()+gigo);
                       d.erase(d.begin()+gigo);
                       numb.push_back(contaite);//numb nos dice el numero de bits que tiene cada codigo
                       int ayuda=0;
                       while (ayudante[ayuda]!=potx)
                        {ayuda++;
                        }
                        fin.push_back(ayuda);
                  }
              }
              else {gigo++;}
}
                   
                     for(int ii=0;ii<xfin.size();ii++)
                     {cout<<"\n xfin["<<ii<<"]="<<xfin[ii];}
                   for(int ii=0;ii<xfin.size();ii++)
                    {cout<<"\n numb["<<ii<<"]="<<numb[ii];}
}
int funca=0;
}

el error se presenta al entrar en la segunda funcion denominada shannon-fano
Echando un vistazo rápido al código, veo un desbordamiento aquí:
Código
  1.    while (feof(archivo) == 0)
  2.    {
  3. caracter = fgetc(archivo);
  4. numPtr[1]=caracter;
  5. ayuda=float(numPtr[1]-48);
  6. int kk=0;
  7. ayudante.push_back(ayuda);
  8. ////////////////////////////////// aqui empezamos a tranformar
  9. if (ayuda==-38)
  10. {
  11.                       if (ayudante[0]==-3)/////saber si es negativo
  12.      { kk=1;
  13.      ayudante.erase (ayudante.begin());
  14.              }//////////
  15.              ayudante.pop_back();
Si ayudante[0] es igual a -3, borrará 2 elementos del vector. Pero ayudante en ese momento tendrá un solo elemento *_*

Tú código es identado:
Código
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <iostream>
  4. #include <vector>
  5. using namespace std;
  6. ////////////
  7. struct datos
  8. {
  9.    std::vector<float> simbolos;
  10.    std::vector<float> frecuencias;
  11.    int tamanodic;
  12. } cd1;
  13. /////////////////////declaracion de funciones
  14. datos histograma(vector<float> &traza);
  15. void shannonfano(datos &vida);
  16. int main()
  17. {
  18.    FILE *archivo;
  19.    char caracter;
  20.    std::vector<float> ayudante;
  21.    std::vector<float> traza;
  22.    float ayuda;
  23.    char numPtr[1];
  24.    float por=5;
  25.    archivo = fopen("D:\\entrada10.txt","r");
  26.    if (archivo == NULL)
  27.    {
  28.        printf("\nError de apertura del archivo. \n\n");
  29.    }
  30.    else
  31.    {
  32.        printf("\nEl contenido del archivo de prueba es \n\n");
  33.        while (feof(archivo) == 0)
  34.        {
  35.            caracter = fgetc(archivo);
  36.            numPtr[1]=caracter;
  37.            ayuda=float(numPtr[1]-48);
  38.            int kk=0;
  39.            ayudante.push_back(ayuda);
  40.            ////////////////////////////////// aqui empezamos a tranformar
  41.            if (ayuda==-38)
  42.            {
  43.                if (ayudante[0]==-3)/////saber si es negativo
  44.                {
  45.                    kk=1;
  46.                    ayudante.erase (ayudante.begin());
  47.                }//////////
  48.                ayudante.pop_back();
  49.                int i=0;
  50.                float suma=0;
  51.                int cifras=0;/////dice cuantas cifras enteras tiene
  52.                while (i<ayudante.size()) ///////saber cuantas cifras enteras tiene
  53.                {
  54.                    if(ayudante[i]==-2)//contador de cifras enteras
  55.                    {
  56.                        cifras=i;
  57.                        i=ayudante.size();
  58.                    }
  59.                    else
  60.                    {
  61.                        i++;
  62.                        cifras=i;
  63.                    }
  64.                    ;
  65.                }        //////////termina while
  66.                int ii=0;
  67.                int cifraaux=cifras;
  68.                float aux=0;
  69.                int k=0;
  70.                while (cifras>1)/////parte entera
  71.                {
  72.                    aux=ayudante[ii];
  73.                    k=cifras;
  74.                    while (k>1) ///////multiplicaciones parte entera
  75.                    {
  76.                        aux=aux*10;
  77.                        k--;
  78.                    }
  79.                    cifras--;
  80.                    ii++;
  81.                    suma=suma+aux;
  82.                }
  83.                suma=suma+ayudante[ii];
  84.                int deci=ayudante.size()-cifraaux-1;
  85.                ii=ayudante.size()-1;
  86.                while (deci>0)////parte decimal
  87.                {
  88.                    aux=ayudante[ii];
  89.                    k=deci;
  90.                    while(k>0)///haciendo decimales
  91.                    {
  92.                        aux=aux/10;
  93.                        k--;
  94.                    }
  95.                    deci--;
  96.                    ii--;
  97.                    suma=suma+aux;
  98.                }
  99.                if (kk==1)/////////signo negativo
  100.                {
  101.                    traza.push_back(suma*-1);
  102.                }
  103.                else
  104.                {
  105.                    traza.push_back(suma);
  106.                }
  107.                ayudante.clear();
  108.            }
  109.            //////////////////////////////////termina transformacion
  110.        }
  111.    }
  112.    fclose(archivo);
  113.    /////////////////////FUNCIONES%%%%%%%%%%%%%
  114.    histograma (traza);
  115.    cout<<"\n="<<cd1.tamanodic;
  116.    shannonfano(cd1);
  117.  
  118.    getch();
  119. }
  120.  
  121. //////////funcion HISTOGRAMA
  122. ////////%%%%%%%%%%&&&&&&&&&&&
  123. datos histograma(vector<float> &traza)
  124. {
  125. //cargamos el primer valor
  126.  
  127.    int contfre=0;
  128.    cd1.simbolos.push_back(traza[0]);
  129.    for (int ii=0; ii<traza.size(); ii++)
  130.    {
  131.        if (traza[ii]==traza[0])
  132.        {
  133.            contfre++;
  134.        }
  135.    }
  136.    cd1.frecuencias.push_back(contfre);
  137.    for (int i=1; i<traza.size(); i++)
  138.    {
  139.        int cont=0;
  140.        int contfre=0;
  141.        for (int ii=0; ii<cd1.simbolos.size(); ii++)
  142.        {
  143.            if (traza[i]==cd1.simbolos[ii])
  144.            {
  145.                cont++;
  146.                break;
  147.            }
  148.        }
  149.        if (cont==0)
  150.        {
  151.            cd1.simbolos.push_back(traza[i]);
  152.            for (int ii=i; ii<traza.size(); ii++)
  153.            {
  154.                if (traza[ii]==traza[i])
  155.                {
  156.                    contfre++;
  157.                }
  158.            }
  159.            cd1.frecuencias.push_back(contfre);
  160.        }
  161.  
  162.    }
  163.    cd1.tamanodic=cd1.simbolos.size();
  164.    for(int ii=0; ii<cd1.simbolos.size(); ii++)
  165.    {
  166.        cout<<"\n simbolos["<<ii<<"]="<<cd1.simbolos[ii];
  167.        cout<<"\n frecuencias["<<ii<<"]="<<cd1.frecuencias[ii];
  168.    }
  169.    float sumama=0;
  170.    for(int ii=0; ii<cd1.simbolos.size(); ii++)
  171.    {
  172.        sumama=sumama+cd1.frecuencias[ii];
  173.    }
  174.    cout<<"\n sumama="<<sumama;
  175.    return cd1;
  176. }
  177.  
  178.  
  179. ///////////FUNCION SHANNON_FANO
  180. ///////////////////////////&&&&&&&&&&&&%%%%%%%%%%%%%%%
  181. void shannonfano(datos &vida)
  182. {
  183.    std::vector<float> ayudante;//copia de los simbolos
  184. //%%%%%%%%%%%%
  185.    int pp=vida.tamanodic;
  186.    float masayuda=0;
  187.    for (int i=0; i<pp; i++)
  188.    {
  189.        masayuda=vida.simbolos[i];
  190.        ayudante.push_back(masayuda);//
  191.    }
  192.  
  193. //%%%%%%%%%%
  194.    bool dic[vida.tamanodic][20];//dic=diccionario
  195.    for (int i=0; i<pp; i++)
  196.    {
  197.        for(int ii=0; ii<20; ii++)
  198.            dic[i][ii]=0;
  199.    }
  200.    std::vector<int> numb;//numero de bits a tomar para la codificacion permite saber cuantos bits debo tomar para cada simbolo
  201.    std::vector<int> fin;// nos dice cual fue el simbolo que salio
  202.    int nci=0;
  203.    int contafin=0;//se guardara en fin
  204.    int numcol=0;//numero de columna en dic
  205.    int numfil=0;//numero de fila en dic
  206. //%%%%%%%%%%%%%%%
  207.    std::vector<float> sfin; //las frecuencias pasan a este vector cuando ya se obtiene el codigo para el respectivo simbolo
  208.    std::vector<float> xfin;//el simbolo pasa a este vector cuando ya tiene un codigo asignado
  209.    int contaite=0;//numero de iteraciones, se guarda en numb
  210. //%%%%%%%%%%%%%%%%%%%%%
  211. //%%%%%%%%%%%%%%%%%%%%%
  212.    float temp;
  213.    float temp2;
  214. //metodo burbuja en caso de que sea necesario ordenar
  215.  
  216.    for (int i=0; i<pp; i++)
  217.    {
  218.        for (int j=i; j<pp; j++)
  219.        {
  220.            if (vida.frecuencias[i]<vida.frecuencias[j])
  221.            {
  222.                temp=vida.frecuencias[i];
  223.                temp2=vida.simbolos[i];
  224.                vida.frecuencias[i]=vida.frecuencias[j];
  225.                vida.simbolos[i]=vida.simbolos[j];
  226.                vida.frecuencias[j]=temp;
  227.                vida.simbolos[j]=temp2;
  228.            }
  229.  
  230.        }
  231.    }
  232.    for(int ii=0; ii<100; ii++)
  233.    {
  234.        cout<<"\n simbolos["<<ii<<"]="<<vida.simbolos[ii];
  235.        cout<<"\n frecuencias["<<ii<<"]="<<vida.frecuencias[ii];
  236.    }
  237. // aqui termina el ordenamiento de frecuencias y simbolos
  238.    float sum=0;
  239.    for (int i=0; i<vida.frecuencias.size(); i++)
  240.    {
  241.        sum=sum+vida.frecuencias[i];
  242.    }
  243.    cout<<"\n suma="<<sum;
  244. // empezamos con el arbol
  245.  
  246.    int z=1;
  247.    std::vector<float> c; //guarda la suma de frecuencias
  248.  
  249.    std::vector<int> cc;//guarda cuantos simbolos suman cada frecuencia
  250.  
  251.    c.push_back(sum);
  252.    cout<<"\n c[0]="<<c[0];
  253.  
  254.    cc.push_back(vida.frecuencias.size());
  255.    cout<<"\n cc[0]="<<cc[0];
  256.    std::vector<float> d;
  257.    cout<<"\n maximo tamaño"<<d.max_size();
  258.    std::vector<int> dd;
  259. //la idea del programa es ir observando los datos en c, para ir armando d,
  260. //al finalizar el ciclo d se guarda en c y vuelve a empezar
  261.    int pa=0;
  262.    int XXX=0;
  263.    int compa=1;
  264.    int kkkkk=c.size();
  265.    for (;;)// ciclo para cambiar de celda
  266.    {
  267.        if (vida.frecuencias.empty())//el programa finaliza cuando el vector frecuencias esta vacio, osea q todos los simbolos ya tienen
  268.            //su respectivo codigo
  269.        {
  270.            break;
  271.        }
  272.        if (XXX>0) //para q copie d en c despues de la primera iteración
  273.        {
  274.            int kkkkk=d.size();
  275.            cout<<"\n kkk="<<kkkkk;
  276.            c.clear();
  277.            cc.clear();
  278.            for (int i=0; i<kkkkk; i++)
  279.            {
  280.                c.push_back(d[i]); //copio d en c
  281.                cc[i]=dd[i];// copio dd en cc
  282.  
  283.            }
  284.        }
  285.        int kkkkk=d.size();
  286.  
  287.        XXX++;
  288.        d.clear();
  289.        dd.clear();
  290.  
  291.        int t=0;
  292.        int v=0;
  293.        int w=0;
  294.  
  295.        int u=0;
  296.  
  297.        for (;;)//en este ciclo se cambia de columna en el vector c
  298.        {
  299.            float tem=c[w];
  300.            u=0;
  301.            if (cc[w]>1)//necesitamos mas de un simbolo para dividir el valor guardado en c[w]
  302.            {
  303.                float sumpar=0;
  304.                while (sumpar<=tem/2)//operacion principal de shannon-fano, ir dividiendo en la mitad las frecuencias
  305.                {
  306.                    sumpar=sumpar+vida.frecuencias[v];
  307.                    u=u+1;
  308.                    v=v+1;
  309.                }
  310.                if (u>1) //quito una para q qde siempre por debajo de la mitad o en la mitad
  311.                {
  312.                    sumpar=sumpar-vida.frecuencias[v-1];
  313.                    u=u-1;
  314.                }
  315.                d.push_back(sumpar);
  316.                dd.push_back(u);
  317.                d.push_back(c[w]-d[t]);
  318.                dd.push_back(cc[w]-dd[t]);
  319.                v=0;
  320.                for (int i=0; i<d.size(); i++)
  321.                {
  322.                    v=v+dd[i];
  323.                }
  324.                t=t+2;
  325.                w=w+1;
  326.                if (w+1>kkkkk)
  327.                {
  328.                    break;
  329.                }
  330.            }// termina if para armar d
  331.            else
  332.            {
  333.                w=w+1;
  334.            }
  335.        }//termina for para armar d
  336.        //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  337. // armamos los codigos %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  338.        numfil=0;
  339.        for (int au=0; au<dd.size(); au++)
  340.        {
  341.            nci=dd[au];
  342.            int p=0;
  343.            int pop=1;
  344.            int qre=1;
  345.            //cout<<"\n numfil="<<numfil;
  346.            while (p<nci)
  347.            {
  348.                while (pop<=fin.size())//buscamos los simbolos que ya tienen un codigo, para no poner bits en sus codigos
  349.                {
  350.                    if (numfil==fin[pop-1])
  351.                    {
  352.                        cout<<"\n no entre a fila="<<numfil;
  353.                        numfil++;
  354.                        pop=1;
  355.                    }
  356.                    else
  357.                    {
  358.                        pop++;
  359.                    }
  360.                    qre++;
  361.                }
  362.                int rem=au%2;//miramos si la posicion es par o impar, asi sabemos si debemos poner 0 o 1
  363.                if (rem==0)
  364.                {
  365.                    //cout<<"\n numfil="<<numfil;
  366.                    dic[numfil][numcol]=0;
  367.                }
  368.                else
  369.                {
  370.                    dic[numfil][numcol]=1;
  371.                }
  372.                numfil++;
  373.                p++;
  374.            }
  375.        }
  376.        numcol++;
  377. //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  378. //armando vectores finales
  379.        float pot=0;//para sfin
  380.        float potx=0;//para xfin
  381.        int knk=dd.size();
  382.        int gigo=0;
  383.        int sumita=0;
  384.        contaite++;
  385.        for (int i=0; i<knk; i++) //en esta parte eliminamos los simbolos que ya tienen un codigo, y los copiamos en xfin, al igual
  386. // su respectiva frecuencia se copia en sfin
  387.        {
  388.            if (dd[gigo]==1)
  389.            {
  390.                if (gigo==0)
  391.                {
  392.                    pot=vida.frecuencias[0];
  393.                    potx=vida.simbolos[0];
  394.                    sfin.push_back(pot);
  395.                    xfin.push_back(potx);
  396.                    vida.simbolos.erase (vida.simbolos.begin());
  397.                    vida.frecuencias.erase (vida.frecuencias.begin());
  398.                    dd.erase (dd.begin());
  399.                    d.erase(d.begin());
  400.                    int ayuda=0;
  401.                    while (ayudante[ayuda]!=potx)//busca la posicion en la que se encuentra el simbolo a sacar
  402.                    {
  403.                        ayuda++;
  404.                    }
  405.                    numb.push_back(contaite);
  406.                    fin.push_back(ayuda);//fin nos dice las filas de dic a las cuales no les debemos poner mas bits
  407.                }
  408.                else
  409.                {
  410.                    sumita=0;
  411.                    for (int i=0; i<gigo; i++)
  412.                    {
  413.                        sumita=sumita+dd[i];
  414.                    }
  415.                    pot=vida.frecuencias[sumita];
  416.                    potx=vida.simbolos[sumita];
  417.                    sfin.push_back(pot);
  418.                    xfin.push_back(potx);
  419.                    vida.simbolos.erase (vida.simbolos.begin()+sumita);
  420.                    vida.frecuencias.erase (vida.frecuencias.begin()+sumita);
  421.                    dd.erase (dd.begin()+gigo);
  422.                    d.erase(d.begin()+gigo);
  423.                    numb.push_back(contaite);//numb nos dice el numero de bits que tiene cada codigo
  424.                    int ayuda=0;
  425.                    while (ayudante[ayuda]!=potx)
  426.                    {
  427.                        ayuda++;
  428.                    }
  429.                    fin.push_back(ayuda);
  430.                }
  431.            }
  432.            else
  433.            {
  434.                gigo++;
  435.            }
  436.        }
  437.  
  438.        for(int ii=0; ii<xfin.size(); ii++)
  439.        {
  440.            cout<<"\n xfin["<<ii<<"]="<<xfin[ii];
  441.        }
  442.        for(int ii=0; ii<xfin.size(); ii++)
  443.        {
  444.            cout<<"\n numb["<<ii<<"]="<<numb[ii];
  445.        }
  446.    }
  447.    int funca=0;
  448. }
  449.  

Es muy díficil de depurar estre código. El código no se ve muy claro lo que te hace dudar que el error esté en cualquier parte.

Primera regla, los nombres de variable deben ser claros y deben diferenciarse entre sí. Es absurdo nombres así:
Código
  1.   int kkkkk=c.size();

Código
  1. int kkkkk=d.size();

Pones una k de menos y ya tienes dos variables distintas en distinto contexto. Preparate para los bugs "extraños".

Segunda regla, el usar funciones de más no es una mala práctica. De hecho para separar visualmente distintas subtareas del código, así es más fácil saber lo que hace cada cosa.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
loadenro

Desconectado Desconectado

Mensajes: 16


Ver Perfil
Re: se ha producido una violacion de acceso a memoria dev c++
« Respuesta #8 en: 29 Abril 2014, 05:46 am »

muchas gracias por tus consejos, voy a trabajar en lo de las variables para q el codigo sea mas legible y entendible, y vuelvo a subirlo
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines