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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con una cosa rarísima (tema punteros)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con una cosa rarísima (tema punteros)  (Leído 2,643 veces)
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Duda con una cosa rarísima (tema punteros)
« en: 15 Abril 2013, 18:50 pm »

Hola a todos.

Tengo un problema, no se por qué al reservar espacio para una matriz dinámica se me de-reserva el espacio de un vector dinámico previamente reservado:

Muestro el código.

Código:

class Graph{
      private:
              int *nodes;
              int **nears;
              int *nNears;
              int nNodes;
....
};

inline void Graph::addArist(int o,int d){
    int n=this->search(o);
    if(n!=-1){
        if(this->nNears[n-1]==0){
            int aux=this->nodes[n-1];
            this->nears[n-1]=(int *)calloc(1,sizeof(int));

            //tras ejecutar esta instrucción, la componente n-1 de 'nodes' deja de //tener su valor original para tener números raros, y si intento reasignarle el valor //a nodes[n-1] el programa falla. No lo entiendo

            (this->nears[n-1])[0]=d;
        }else{
            int *aux=(int *)realloc(this->nears[n-1],(this->nNears[n-1]+1)*sizeof(int));
            this->nears[n-1]=aux;
           
            (this->nears[n-1])[this->nNears[n-1]]=d;
            this->nNears[n-1]++;
        }
    }
}


PD. Lo hago con calloc en lugar de new para poder usar realloc.

Muchas gracias


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una cosa rarísima (tema punteros)
« Respuesta #1 en: 15 Abril 2013, 19:36 pm »

Hola a todos.

...............................................

PD. Lo hago con calloc en lugar de new para poder usar realloc.


No sé bien por qué te complicas la vida con calloc y realloc si la ventaja de trabajar con new es que usas el heap, más o menos la memoria del ordenador y puedes dimensionar a valores de 1 000 000 o más altos. Es aprovechar la ventaja de trabajar en C++.

Saluditos!. ....


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con una cosa rarísima (tema punteros)
« Respuesta #2 en: 15 Abril 2013, 20:14 pm »

Tienes la clase vector:
http://www.cplusplus.com/reference/vector/vector/

Ejemplo de funcionamiento:

Código
  1. #include <vector>
  2.  
  3. //...
  4.  
  5. vector<int> Cosita; // Crea un vector de enteros;
  6.  
  7. Cosita.push_back(1); // Añade un 1 al vector
  8.  
  9. Cosita.push_back(2); // Añade un 2 al vector
  10.  
  11. Cosita.push_back(4); // Añade un 4 al vector
  12.  
  13. for (int i = 0; i < Cosita.size();i++) // Recorremos el vector
  14.   cout<<"El valor es "<<Cosita[i]<<endl;
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
SARGE553413

Desconectado Desconectado

Mensajes: 176


Ver Perfil
Re: Duda con una cosa rarísima (tema punteros)
« Respuesta #3 en: 15 Abril 2013, 23:11 pm »

Gracias por las respuestas.

El motivo por el cual no he usado new es porque, hasta donde yo se, si tienes un vector de 20 enteros por ej, construido con new, si quieres redimensionarlo a 25 tienes que hacer uno nuevo de 25 y copiarle los valores antiguos, y pensaba que poder hacerlo con realloc sería mas eficiente.

De todas formas creo que usaré la librería vector mejor, aunque no se aún muy bien como va, pero bueno ya la iré aprendiendo.

Saludos.
« Última modificación: 15 Abril 2013, 23:18 pm por SARGE553413 » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda con una cosa rarísima (tema punteros)
« Respuesta #4 en: 16 Abril 2013, 00:30 am »

Gracias por las respuestas.

El motivo por el cual no he usado new es porque, hasta donde yo se, si tienes un vector de 20 enteros por ej, construido con new, si quieres redimensionarlo a 25 tienes que hacer uno nuevo de 25 y copiarle los valores antiguos, y pensaba que poder hacerlo con realloc sería mas eficiente.


Me repito, la ventaja de new es que puedes sobredimensionar por si te quedas corto, si te hacen falta 25 dimensionas a 250 o 2500, no problem. No es como en C donde la memoria es un bien escaso que hay que mirar con lupa.

Saluditos!....
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda con una cosa rarísima (tema punteros)
« Respuesta #5 en: 16 Abril 2013, 01:04 am »

Me repito, la ventaja de new es que puedes sobredimensionar por si te quedas corto, si te hacen falta 25 dimensionas a 250 o 2500, no problem. No es como en C donde la memoria es un bien escaso que hay que mirar con lupa.

Saluditos!....

Eh? Cada llamada a new reserva nueva memoria. No hay redimensionamiento alguno.
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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] - Duda punteros
Programación C/C++
h0oke 2 2,364 Último mensaje 23 Mayo 2010, 02:19 am
por h0oke
Duda con punteros
Programación C/C++
cazagavilan 5 2,886 Último mensaje 14 Abril 2012, 05:47 am
por cazagavilan
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 4,918 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Cosa rarísima sucede al ejecutar mi pequeño programa
Programación C/C++
FMLTGRD 5 2,575 Último mensaje 29 Noviembre 2014, 21:14 pm
por FMLTGRD
Cosa rarisima en codigo c++
Ejercicios
anonimo115 1 2,634 Último mensaje 5 Septiembre 2017, 00:42 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines