Autor
|
Tema: [Ayuda] Problema un poco sonso al intercambiar un puntero por otro. (Leído 3,165 veces)
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. mi problema es que en TEORIA mi funcion setnewptr deberia de asignar y/o devolver en el parametro old el puntero a New, pero solo lo afecta dentro de la funcion mas cuando termina no me afecta a c_pstr... ¿Como puedo solucionar esto?... Aquí lo que digo... #include<iostream> #include<cstdlib> #include<cstring> using namespace std; void* setnewptr( void *old , void *New); int main() { char *c_pstr = NULL; char *c_str = (char*)malloc(sizeof(char)*10); strcpy(c_str , (const char*)"Hola"); cout << (char*)setnewptr( c_pstr , c_str ); cout << c_pstr << endl; return 0; } void* setnewptr( void *old , void *New) /** Libera a [*old] si apunta a algo y le establece [*New]; By BlackZeroX ( http://Infrangelux.sytes.net/ ) **/ { if ( old != NULL ) free (old); return old=New; }
|
|
« Última modificación: 12 Febrero 2011, 10:53 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
diskontrol
Desconectado
Mensajes: 89
RAWR!
|
Buenas, para reservar y liberar memoria en c++ tienes new y delete. No se modifica fuera de la función porque new y old son copias, lo que estas pasando por referencia son las direcciones a la memoria reservada para la cadena, no a los punteros que es lo que tu intentas modificar en la función, como puedes comprobar si modificas así el programa: #include<iostream> #include<cstdlib> #include<cstring> using namespace std; void* setnewptr( void *old , void *New); int main() { char *c_pstr = NULL; char *c_str = (char*)malloc(sizeof(char)*10); strcpy(c_str , (const char*)"Hola"); cout << (char*)setnewptr( c_pstr , c_str ); c_pstr=(char *)setnewptr(c_pstr,c_str); cout << c_pstr << endl; return 0; } void* setnewptr( void *old , void *New) /** Libera a [*old] si apunta a algo y le establece [*New]; By BlackZeroX ( http://Infrangelux.sytes.net/ ) **/ { if ( old != NULL ) free (old); return old=New; }
|
|
|
En línea
|
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI
|
|
|
pucheto
Desconectado
Mensajes: 215
|
Lo que en realidad queres pasarle a la funcion son punteros a punteros o referencias a punteros (en caso de ser C++)...
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
para reservar y liberar memoria en c++ tienes new y delete.
lo se. c_pstr=(char *)setnewptr(c_pstr,c_str);
Es lo que quiero evitar, ya que actualmente asi es como lo estoy haciendo. Lo que quiero evitar es hacer una igualdad asi a=b. Dulces Lunas!¡.
|
|
« Última modificación: 12 Febrero 2011, 21:44 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
pucheto
Desconectado
Mensajes: 215
|
Vos no queres algo asi? void setnewptr( void* &old , void* &New){ //tomo referencias a puntero if ( old != NULL ) free (old); old=New; } //y se usa:... void* p_viejo = ... ; void* p_nuevo = ... ; setnewptr(p_viejo,p_nuevo);
Otra forma es: void setnewptr( void** old , void** New){//tomo puntero a puntero if ( *old != NULL ) free (*old); *old=*New; } //y se usa:... void* p_viejo = ... ; void* p_nuevo = ... ; setnewptr(&p_viejo,&p_nuevo); //notece q lo que paso por parametro es un puntero a puntero
Y la q mas me gusta: template<class T> void setnewptr( T* &old , T* &New){ //tomo referencias a puntero, pero ahora no hacen falta casteos a void*... if ( old != NULL ) free (old); old=New; } //y se usa:... Tipo1* p_viejo = ... ; Tipo1* p_nuevo = ... ; setnewptr(p_viejo,p_nuevo); //no me fije si compila, pero debe compilar, el compilador solo puede inferir el tipo...
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
. @puchero gracias no sabia eso de la referencia al puntero con el signo &. Me quedare con esta. template<class T> T* setnewptr( T *&old , T *New) { if ( old != NULL ) delete (old); // free (old); return old=New; }
Temibles Lunas!¡.
|
|
« Última modificación: 13 Febrero 2011, 07:23 am por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda puntero
Programación C/C++
|
kworld
|
5
|
3,189
|
26 Mayo 2010, 01:12 am
por nicolas_cof
|
|
|
Problema con puntero láser azul
Electrónica
|
danielpower
|
0
|
3,096
|
9 Febrero 2012, 07:33 am
por danielpower
|
|
|
[AYUDA] Puntero de controles
Programación Visual Basic
|
Miseryk
|
4
|
2,300
|
27 Marzo 2012, 07:23 am
por BlackZeroX
|
|
|
Problema con variables puntero
Programación C/C++
|
oxi12pek
|
7
|
3,214
|
5 Noviembre 2012, 17:26 pm
por BatchianoISpyxolo
|
|
|
otro problema de matematica ... ayuda plis xD
Dudas Generales
|
gabrielprocs
|
4
|
2,609
|
19 Septiembre 2014, 02:21 am
por simorg
|
|