Autor
|
Tema: Duda con una cosa rarísima (tema punteros) (Leído 2,908 veces)
|
SARGE553413
Desconectado
Mensajes: 176
|
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. 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
Mensajes: 1.314
|
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
Mensajes: 1.211
|
Tienes la clase vector: http://www.cplusplus.com/reference/vector/vector/Ejemplo de funcionamiento: #include <vector> //... vector<int> Cosita; // Crea un vector de enteros; Cosita.push_back(1); // Añade un 1 al vector Cosita.push_back(2); // Añade un 2 al vector Cosita.push_back(4); // Añade un 4 al vector for (int i = 0; i < Cosita.size();i++) // Recorremos el vector cout<<"El valor es "<<Cosita[i]<<endl;
|
|
|
En línea
|
|
|
|
SARGE553413
Desconectado
Mensajes: 176
|
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
Mensajes: 1.314
|
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
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[C] - Duda punteros
Programación C/C++
|
h0oke
|
2
|
2,627
|
23 Mayo 2010, 02:19 am
por h0oke
|
|
|
Duda con punteros
Programación C/C++
|
cazagavilan
|
5
|
3,265
|
14 Abril 2012, 05:47 am
por cazagavilan
|
|
|
Duda Punteros Dobles/Array de punteros
Programación C/C++
|
MisterJava
|
2
|
5,210
|
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,817
|
29 Noviembre 2014, 21:14 pm
por FMLTGRD
|
|
|
Cosa rarisima en codigo c++
Ejercicios
|
anonimo115
|
1
|
2,797
|
5 Septiembre 2017, 00:42 am
por AlbertoBSD
|
|